Есть ли какое-то ограничение на размер файла при принудительной загрузке его с помощью PHP на Apache?…
Попытка принудительно загрузить файл с помощью PHP с помощью обычного:
header("Content-type: $type" );
header("Content-Disposition: attachment; filename=$name");
header('Content-Length: ' . filesize($path));
И это успешно для файлов где-то ниже 32 МБ. Для больших это просто возвращает обнуленный файл.
Очевидно, что есть какой-то предел, но что его устанавливает? Использование Apache 2.2.11 и PHP 5.3.0.
Я задал этот вопрос на stackoverflow, но они сказали, что он лучше подходит здесь. Я лично не уверен, так как я не знаю, что вызывает это в первую очередь. Может быть, это Apache?
1 ответ
Решение
readfile()
буферизует весь файл в памяти перед его передачей обратно клиенту. В вашем php.ini
у тебя наверное есть
memory_limit=32M
Либо поднять это, либо наматывать файл на более мелкие куски
<?php
function readfile_chunked ($filename) {
$chunksize = 1*(1024*1024); // how many bytes per chunk
$buffer = '';
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
print $buffer;
}
return fclose($handle);
}
?>