PHP: readfile () возвращает zip-файл с 0 байтами

Я создал скрипт 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, Выглядит так же, как описано в этом посте, без какого-либо рабочего решения.

0

Решение

Попробуйте добавить ob_end_flush (); перед чтением файла ($ filePath); , Это

1

Другие решения

Самое простое решение — полностью отказаться от php, просто предоставьте HTML-ссылку на zip и пусть ваш сервер сделает всю работу.

Кроме того, если вам действительно нужно придерживаться php для этого, у вас нет кода, который фактически отправляет файл пользователю, readfile не делает этого, он просто загружает его в программу

0

По вопросам рекламы [email protected]