Назад | Перейти на главную страницу

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

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); 
} 
?>