Файл с zip-файлом с результатами PHP в файле cpgz после извлечения

Я zipping папки и файлы с php, но когда я пытаюсь открыть zip-файл, я получаю файл cpgz. После извлечения этого файла я получаю другой zip-файл. Что он делает, так это басистически сканировать текущую папку для файлов и папок на zip. Это код, который я использую:

function Zip($source, $destination) { if (!extension_loaded('zip') || !file_exists($source)) { return false; } $zip = new ZipArchive(); if (!$zip->open($destination, ZIPARCHIVE::CREATE)) { return false; } $source = str_replace('\\', '/', realpath($source)); if (is_dir($source) === true) { $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST); foreach ($files as $file) { $file = str_replace('\\', '/', realpath($file)); if (is_dir($file) === true) { $zip->addEmptyDir(str_replace($source . '/', '', $file . '/')); } else if (is_file($file) === true) { $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file)); } } } else if (is_file($source) === true) { $zip->addFromString(basename($source), file_get_contents($source)); } return $zip->close(); } if($_GET["archive"]== 'true'){ $date = date("Ymd_Hi"); $dir = dirname(__FILE__); $filename = $date.".zip"; Zip(getcwd(), $filename); header("Content-disposition: attachment; filename=$filename"); header('Content-type: application/zip'); readfile($filename); unlink($filename); } 

У меня была точно такая же проблема, и я узнал, что эти два вызова функций могут помочь:

 header("Content-disposition: attachment; filename=$filename"); header('Content-type: application/zip'); // Add these ob_clean(); flush(); readfile($filename); unlink($filename); 

Обычно настройка Content-Disposition и Content-Length должна быть достаточной, однако сброс выходного буфера PHP и базового выходного буфера (Apache или такого) помогает, когда вывод случайно отправляется до того, как заголовки заданы в PHP.

В моем случае комментирование вызовов header () и readfile () для отладки помогло увидеть, что предупреждения были выведены до отправки файла.

Надежда, которая помогает кому-то в будущем.