Многие пользователи моего сайта сообщили о проблемах с загрузкой большого файла (80 МБ). Я использую принудительную загрузку с использованием заголовков. При необходимости я могу предоставить дополнительные настройки php. Я использую CakePHP framework, но этот код является обычным php. Я использую php 5.2 с apache на выделенном виртуальном сервере из медиа-храма CentOS Linux. Видите ли вы какие-либо проблемы со следующим кодом:Принудительная загрузка большого файла с помощью php
set_time_limit(1500);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . basename($file_path) . "\"");
header("Content-Length: ".$content_length);
header("Content-Transfer-Encoding: binary");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Pragma: public');
header('Expires: 0');
//Change this part
$handle = fopen($file_path, 'rb');
while (!feof($handle))
{
echo fread($handle, 4096);
ob_flush();
flush();
}
fclose($handle);
exit;
В принципе, проблема сообщается, что начинается загрузка, а затем останавливается в середине. Я думал, что это проблема с лимитом, поэтому я добавляю код set_time_limit. Раньше я использовал функцию чтения php, но это также не работало плавно.
Как насчет 'set_time_limit (0)'? – alex
Какова точка цикла для вывода файла, если вы не возражаете, чтобы я спросил? –
@ElYobo Мое предположение, поэтому он не потребляет слишком много памяти сразу. – alex