我试图找出为什么PHP的Content-Length头被覆盖。 这是demo.php
<?php header("Content-Length: 21474836470");die; ?>
请求获取标题
curl -I http://someserver.com/demo.php HTTP/1.1 200 OK Date: Tue, 19 Jul 2011 13:44:11 GMT Server: Apache/2.2.16 (Debian) X-Powered-By: PHP/5.3.3-7+squeeze3 Content-Length: 2147483647 Cache-Control: must-revalidate Content-Type: text/html; charset=UTF-8
请参阅内容长度? 它最大为2147483647字节,即2GB。
现在,如果修改demo.php像这样
<?php header("Dummy-header: 21474836470");die; ?>
标题不会被覆盖。
HTTP/1.1 200 OK Date: Tue, 19 Jul 2011 13:49:11 GMT Server: Apache/2.2.16 (Debian) X-Powered-By: PHP/5.3.3-7+squeeze3 Dummy-header: : 21474836470 Cache-Control: must-revalidate Content-Type: text/html; charset=UTF-8
这里是加载的模块
root@pat:/etc/apache2# ls /etc/apache2/mods-enabled/ alias.conf authz_host.load dav_fs.load expires.load php5.conf reqtimeout.load status.conf alias.load authz_user.load dav.load headers.load php5.load rewrite.load status.load auth_basic.load autoindex.conf dav_lock.load mime.conf proxy.conf setenvif.conf authn_file.load autoindex.load dir.conf mime.load proxy_http.load setenvif.load authz_default.load cgi.load dir.load negotiation.conf proxy.load ssl.conf authz_groupfile.load dav_fs.conf env.load negotiation.load reqtimeout.conf ssl.load
这里是一个phpinfo(): http : //pastehtml.com/view/b0z02p8zc.html
Apache支持超过2GB的文件,因为我没有任何问题直接访问大文件:
curl -I http://www.someserver.com/somehugefile.zip (5.3 Gig) HTTP/1.1 200 OK Date: Tue, 19 Jul 2011 14:00:25 GMT Server: Apache/2.2.16 (Debian) Last-Modified: Fri, 15 Jul 2011 08:50:22 GMT ETag: "301911-1548e4b11-4a817bd63ef80" Accept-Ranges: bytes Content-Length: 5713578769 Cache-Control: must-revalidate Content-Type: application/zip
这是一个uname -a
Linux pat.someserver.com 2.6.38.2-grsec-xxxx-grs-ipv6-32 #1 SMP Fri Apr 15 17:41:28 UTC 2011 i686 GNU/Linux
希望有人能帮助!
干杯
好像php将Content-length转换为int
是的,这当然是一个32位的东西。 那么我不想调整PHP,重新编译或什么的,所以暂时,我会检查文件的大小,如果超过2GB,我不发送标题。
谢谢大家的意见