Php 下载超过63MB的文件时出错500
我不确定这是一个PHP问题、服务器配置问题还是硬件问题,但我想我应该从PHP开始,看看是否有任何建议。直到最近,这段代码还运行得很好,我还不知道任何可能导致这一情况的配置更改。我们最近确实从Debian Lenny升级到了Squeeze(从PHP5.2升级到5.3),但代码在另一台Squeeze服务器上运行良好 我有一段PHP代码,它获取一个作为GET变量传递的文件的路径(通过mod_rewrite从一个到的请求重写)。这样做的原因与统计跟踪有关 该文件被传递到该位代码(为了可读性而简化) 如您所见,只有当文件可读时(即路径完全正确),才会执行代码。对于小于63MB的文件,一切正常。对于超过63MB的任何内容,服务器返回500错误。(这在Firefox/Chrome中被报告为“未找到文件”,我猜应该是“内部服务器错误”,但我猜这是另一个故事)。Apache错误日志中没有任何内容 有人能想到会导致这种情况发生的任何PHP或Apache服务器配置吗?据我所知,PHP内存限制不应该受到readfile或fpassthru的影响。我注意到我的PHP内存限制是64MB,但是,关闭对PHP的mod_rewrite重定向并不能解决这个问题。这些文件仍然无法下载 非常感谢你的建议 已更新******** 好的,我将PHP内存限制从64MB增加到200MB。允许下载高达200MB的文件。然而,问题仍然存在。鉴于readfile和fpassthru不应受到内存限制的影响,并且我已检查输出缓冲是否关闭,为什么大文件会导致此(新)问题?解决方法很简单(工作数小时后) 添加到Apache虚拟主机配置中 看起来,不管ob_get_level()说了什么,输出缓冲都在发生。换句话说,只要选择使用输出缓冲就足以影响PHP内存的使用。解决方法很简单(工作数小时后) 添加到Apache虚拟主机配置中Php 下载超过63MB的文件时出错500,php,apache,Php,Apache,我不确定这是一个PHP问题、服务器配置问题还是硬件问题,但我想我应该从PHP开始,看看是否有任何建议。直到最近,这段代码还运行得很好,我还不知道任何可能导致这一情况的配置更改。我们最近确实从Debian Lenny升级到了Squeeze(从PHP5.2升级到5.3),但代码在另一台Squeeze服务器上运行良好 我有一段PHP代码,它获取一个作为GET变量传递的文件的路径(通过mod_rewrite从一个到的请求重写)。这样做的原因与统计跟踪有关 该文件被传递到该位代码(为了可读性而简化) 如您
看起来,不管ob_get_level()说了什么,输出缓冲都在发生。换句话说,仅使用输出缓冲的选项就足以影响PHP内存的使用。输出缓冲是否已关闭?(这是readfile()手册页面提到的唯一可能的内存问题)PHPs
memory\u limit
可能。设置为什么?@mario:这不会产生500个错误。@事实上,在生产环境中,我总是将log\u errors
设置为1,将display\u errors
设置为0,所有错误都会导致500个内部服务器错误听起来像是内存限制错误或脚本超时错误。检查您的php.ini设置。输出缓冲是否已关闭?(这是readfile()手册页面提到的唯一可能的内存问题)PHPsmemory\u limit
可能。设置为什么?@mario:这不会产生500个错误。@事实上,在生产环境中,我总是将log\u errors
设置为1,将display\u errors
设置为0,所有错误都会导致500个内部服务器错误听起来像是内存限制错误或脚本超时错误。检查php.ini设置。
if(is_readable($theFile)) {
//$fh= fopen($theFile, "r");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"".basename($theFile)."\"");
header("Content-Length:".(string)(filesize($theFile)));
sleep(1);
//fpassthru($fh);
readfile($theFile);
}
php_value output_buffering 0