在 Apache 上使用 PHP 强制下载文件时,文件大小是否有限制?…

在 Apache 上使用 PHP 强制下载文件时,文件大小是否有限制?…

尝试使用常规方法通过 PHP 强制下载文件:

header("Content-type: $type" );
header("Content-Disposition: attachment; filename=$name");
header('Content-Length: ' . filesize($path));

对于小于 32 mb 的文件,它可以成功执行。对于更大的文件,它只会返回零文件。

显然存在某种限制,但是什么限制了它呢?使用 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); 
} 
?>

相关内容