尝试使用常规方法通过 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);
}
?>