Member 3722539 Ответов: 1

Создайте zip-файл и загрузите его


Я пытаюсь создать zip-файл и загрузить его .Я работал над этим уже несколько часов, но не мог заставить его работать.Он создает zip-файл, но загружает исходный файл

Что я уже пробовал:

<table class="table table-bordered">
<tr>
<td>Name</td>
<td></td>
</tr>
<tr>


<?php

while ($row = mysqli_fetch_array($data)) {
    ?>
<tr>
<td><?php echo $row['filename']; ?></td>
<td><a href="ajax.php?id=<?php echo $row['id']; ?>">Download</a></td>

</tr>
	<?php
}

?>


</tr>
</table>



------------------------------------
<?php

$id = $_GET['id'];

$con = mysqli_connect('localhost', 'root', '', 'test');
$data = mysqli_query($con, "select * from files where id={$id}");
$name = '';
foreach ($data as $d) {
    $name = $d['filename'];
}

$zip = new ZipArchive();
$zip->open('zipped.zip', ZipArchive::CREATE);
$zip->addFile($name);
$zip->close();
if (file_exists($name)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename='.$name);
    header('Content-Length: '.filesize($name));
    //ob_clean();
    //flush();
    readfile($name);
}

1 Ответов

Рейтинг:
11

Richard Deeming

Потому что это именно то, что вы говорите ему делать!

$name содержит имя исходного файла:

$name = $d['filename'];

Вы создаете ZipArchive, и добавьте этот файл к нему:
$zip = new ZipArchive();
$zip->open('zipped.zip', ZipArchive::CREATE);
$zip->addFile($name);
$zip->close();

Затем вы передаете исходный файл для пользователя:
if (file_exists($name)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename='.$name);
    header('Content-Length: '.filesize($name));
    //ob_clean();
    //flush();
    readfile($name);
}

Вместо этого вам нужно передать zip файл пользователю:
if (file_exists('zipped.zip')) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename=zipped.zip');
    header('Content-Length: '.filesize('zipped.zip'));
    readfile('zipped.zip');
}


Member 3722539

спасибо