Есть ли какое-то ограничение на размер файла при принудительной загрузке его с помощью 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); 
} 
?>
Другие вопросы по тегам