Я успешно загружаю PDF-файлы с этим кодом. Я использую идентичный код для загрузки zip-файла, содержащего exe-файл (просто меняя имя файла и меняя тип mime на application / zip), и получаю эту ошибку при попытке открыть загруженный файл:
«Windows не может открыть папку.
Сжатая (заархивированная) папка ‘[filename]’ недействительна «
Я проверил, что оригинальный несжатый файл работает, а также я могу успешно разархивировать папку на моем ноутбуке и запустить exe.
Я также загрузил zip-файл со своего веб-сайта через Filezilla во временную папку, распаковал его и запустил, чтобы убедиться, что с загрузкой проблем не возникло.
Это файл размером 70 МБ, поэтому я попытался загрузить ZIP-файл размером 65 КБ — та же ошибка.
Я добавил заголовок («Content-Length:». $ File_size), хотя PDF-файлы без него загружались нормально — та же ошибка.
Я пробовал application / octet-stream — та же ошибка.
Есть идеи? Любые предложения приветствуются.
$file_size = filesize($file_path);
$file = @fopen($file_path,"r");
if ($file)
{
header("Pragma: public");
header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment; filename=\"$file_name\"");
//header("Content-Length: " . $file_size);
header("Content-Type: " . $ctype);set_time_limit(0);
fseek($file, 0);
while(!feof($file))
{
print(@fread($file, 1024*8));
ob_flush();
flush();
if (connection_status()!=0)
{
@fclose($file);
exit;
}
}
@fclose($file);
}
Проблема может быть в том, что ваш php_execution_time
на низком уровне, и он прерывается до загрузки zip.
Проверьте, соответствует ли размер почтового индекса размеру сервера.
или активируйте mod_xsendfile в Apache и установите заголовок:
header("X-Sendfile: $filename");
Других решений пока нет …