Попытка принудительно загрузить файл с помощью 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, но они сказали, что он лучше подходит здесь. Я лично не уверен, так как не знаю, что вызывает это в первую очередь. Может это Апач?
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);
}
?>