Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 下载超过63MB的文件时出错500_Php_Apache - Fatal编程技术网

Php 下载超过63MB的文件时出错500

Php 下载超过63MB的文件时出错500,php,apache,Php,Apache,我不确定这是一个PHP问题、服务器配置问题还是硬件问题,但我想我应该从PHP开始,看看是否有任何建议。直到最近,这段代码还运行得很好,我还不知道任何可能导致这一情况的配置更改。我们最近确实从Debian Lenny升级到了Squeeze(从PHP5.2升级到5.3),但代码在另一台Squeeze服务器上运行良好 我有一段PHP代码,它获取一个作为GET变量传递的文件的路径(通过mod_rewrite从一个到的请求重写)。这样做的原因与统计跟踪有关 该文件被传递到该位代码(为了可读性而简化) 如您

我不确定这是一个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虚拟主机配置中


看起来,不管ob_get_level()说了什么,输出缓冲都在发生。换句话说,仅使用输出缓冲的选项就足以影响PHP内存的使用。

输出缓冲是否已关闭?(这是readfile()手册页面提到的唯一可能的内存问题)PHPs
memory\u limit
可能。设置为什么?@mario:这不会产生500个错误。@事实上,在生产环境中,我总是将
log\u errors
设置为1,将
display\u errors
设置为0,所有错误都会导致500个内部服务器错误听起来像是内存限制错误或脚本超时错误。检查您的php.ini设置。输出缓冲是否已关闭?(这是readfile()手册页面提到的唯一可能的内存问题)PHPs
memory\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