PHP скачать zip, созданный с помощью ziparchive - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в PHP и пытаюсь создать функцию ZIP, которая вызывается через ajax и загружается для пользователя. Я получаю положительный ответ с почтовым индексом, но потоковая передача выдает ошибку filesize (): stat не удалось для ../test.zip, а также при чтении файла не удалось открыть поток, такого файла или каталога на странице php нет. Вот мой код ниже - я довольно жестко опечатался и не могу найти ответ, который имеет смысл для моей ситуации

    <?php
    require("../../common.php");
    ini_set('display_startup_errors',1);
    ini_set('display_errors',1);
    error_reporting(-1);
$thisdir = " ";
$zip = new ZipArchive();
$filename = "../test.zip";
if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
    exit("cannot open <$filename>\n");
}
$zip->addFromString('insert.pdf' . time(), "#1 This is a test string added as testfilephp.txt.\n");;
$zip->addFile($filename . "../../../folder/pdf_folder/");
echo "numfiles: " . $zip->numFiles . "\n";
echo "status:" . $zip->status . "\n";
echo $filename;
//$size = filesize($zip->filename);
$zip->close();
header("Content-type: application/zip"); 
header("Content-Disposition: attachment; filename=$filename");
header("Content-length: " . filesize($filename));
header("Pragma: no-cache"); 
header("Expires: 0"); 
readfile("$filename");
?>

спасибо за любую помощь или руководство

****** edit здесь ошибка для кода

Предупреждение : размер файла (): сбой статистики для ../test.zip в / var / --- / ---- / --- / ---- / control /ajax/zipAJAX.php on line 21

Предупреждение : файл чтения (../ test.zip): не удалось открыть поток: нет такого файла или каталога в / var / --- / ---- / --- / - - / control / ajax / zipAJAX.php on line 24

1 Ответ

0 голосов
/ 28 июня 2018

Вы не можете добавить содержимое папки в zip-файл с помощью метода addFile. Вы должны зациклить каталог (http://php.net/dir) и добавить каждый файл в zip-файл с помощью метода addFile.

Прежде чем отправлять какие-либо данные пользователю, вы можете проверить, существует ли zip-файл.

$zip->close();
if(file_exists($file)) {
  header("Content-type: application/zip"); 
  header("Content-Disposition: attachment; filename=$filename");
  header("Content-length: " . filesize($filename));
  header("Pragma: no-cache"); 
  header("Expires: 0"); 
  readfile("$filename");
}

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

...