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


2 Answers

$zip = new ZipArchive;
    if ($zip->open('assets/myzip.zip',  ZipArchive::CREATE)) {
        $zip->addFile('folder/bootstrap.js', 'bootstrap.js');
        $zip->addFile('folder/bootstrap.min.js', 'bootstrap.min.js');
        $zip->close();
        echo 'Archive created!';
        header('Content-disposition: attachment; filename=files.zip');
        header('Content-type: application/zip');
        readfile($tmp_file);
   } else {
       echo 'Failed!';
   }
Question

Я пытаюсь загрузить 2 файла, создав zip-файл на локальном сервере. Файл загружается в формате zip, но когда я пытаюсь извлечь it.it, вы получите ошибку: подпись в конце-центральной директории не найдена. Либо этот файл не является zip-файлом, либо представляет собой один диск из многочастного архива. В последнем случае центральный каталог и комментарий к zip-файлу будут найдены на последнем диске (дисках) этого архива.

следующий код, который я использую для этого:

 <?php
$file_names = array('iMUST Operating Manual V1.3a.pdf','iMUST Product Information Sheet.pdf');

//Archive name
$archive_file_name=$name.'iMUST_Products.zip';

//Download Files path
$file_path=$_SERVER['DOCUMENT_ROOT'].'/Harshal/files/';


zipFilesAndDownload($file_names,$archive_file_name,$file_path);

function zipFilesAndDownload($file_names,$archive_file_name,$file_path)
{
        //echo $file_path;die;
    $zip = new ZipArchive();
    //create the file and throw the error if unsuccessful
    if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
        exit("cannot open <$archive_file_name>\n");
    }
    //add each files of $file_name array to archive
    foreach($file_names as $files)
    {
        $zip->addFile($file_path.$files,$files);
        //echo $file_path.$files,$files."

    }
    $zip->close();
    //then send the headers to force download the zip file
    header("Content-type: application/zip"); 
    header("Content-Disposition: attachment; filename=$archive_file_name"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 
    readfile("$archive_file_name");
    exit;
}




?>

Я проверил значения всех переменных, которые переходят в функцию, все это прекрасно. Пожалуйста, смотрите это. Спасибо заранее.




Одна из ошибок может заключаться в том, что файл не читается как формат «архив». проверить ZipArchive не открытие файла - Код ошибки: 19 . Откройте загруженный файл в текстовом редакторе, если у вас есть какие-либо html-теги или отладочные инструкции при запуске, очистите буфер перед чтением файла.

ob_clean();
flush();
readfile("$archive_file_name");



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

Если файл не создается на локальном сервере при запуске скрипта, скорее всего, у вас такая же проблема, как и у меня.




Related