Я создал скрипт php, чтобы позволить пользователю загружать файлы zip.
Сценарий выглядит так:
$filePath = '/path/to/zipfile.zip'; // file is below /public_html/ directory
if(file_exists($filePath)) {
$fileName = basename($filePath);
$fileSize = filesize($filePath); //returns: 26494938
header("Content-Type: application/zip");
header("Content-Length: ".$fileSize);
header("Content-Disposition: attachment; filename=".$fileName);
readfile($filePath);
die;
};
Я ожидаю, что этот сценарий пройдет zipfile.zip
для скачивания. И это так, всплывающее диалоговое окно сохранения, я выбираю, где сохранить, нажимая сохранить и Zip файл сохраняет. За исключением одной важной вещи — файл с 0 байтами, это совершенно пустой zip-файл. Оригинальный zip-файл заполнен файлами (около 25 Мб). Может быть, размер проблема?
Может кто-нибудь помочь с некоторыми советами? Путь к файлу правильный. Я подозреваю, что проблема, скорее всего, связана с readfile()
размер файла и / или файла zip, если есть, то есть ли альтернатива readfile()
это будет работать? Спасибо!
Обновить: Я пытался использовать функцию readfile_chunked
как уже упоминалось в этом посте:Readfile читает 0 байтов из большого файла?«- результат состоит в том, что zip после загрузки теперь имеет некоторый размер (больше 0 байт) и все правильное содержимое внутри него, похоже, что все в порядке, но zip-файл недействителен, его нельзя разархивировать и открыть нормально. В Win8 при попытке Чтобы открыть загруженный ZIP-файл, я получаю эту ошибку: The Compresed (zipped) Folder zipfile.zip is invalid.
, Конечно, оригинальный почтовый файл работает нормально. WinRAR показывает эту ошибку: zipfile.zip: Unexpected end of archive
, Выглядит так же, как описано в этом посте, без какого-либо рабочего решения.
Попробуйте добавить ob_end_flush (); перед чтением файла ($ filePath); , Это
Самое простое решение — полностью отказаться от php, просто предоставьте HTML-ссылку на zip и пусть ваш сервер сделает всю работу.
Кроме того, если вам действительно нужно придерживаться php для этого, у вас нет кода, который фактически отправляет файл пользователю, readfile не делает этого, он просто загружает его в программу