2011-07-19 11 views
5

Estoy tratando de entender por qué el encabezado Content-Length de php se sobrescribe. Esta es demo.phpencabezado de longitud de contenido de php se sobrescribe!

<?php 
header("Content-Length: 21474836470");die; 
?> 

una solicitud para descargarse las cabeceras

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 

Ver Content-Length? Se maximiza en 2147483647 bytes, eso es 2GB.

Ahora bien, si modificar demo.php al igual que

<?php 
header("Dummy-header: 21474836470");die; 
?> 

la cabecera no se sobrescribe.

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 

Éstos son los módulos cargados

[email protected]:/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 

Aquí es un phpinfo(): http://pastehtml.com/view/b0z02p8zc.html

Apache hace archivos de soporte de más de 2 GB, ya que no tienen ningún problema para acceder a archivos de gran tamaño directamente :

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 

Aquí es una 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 

¡Espero que alguien te pueda ayudar!

aplausos

+0

Es todavía un 32 bits Apache con PHP 32 bits - PHP de cortar el bigint en un int de 32 bits firmado, por lo tanto, el truncamiento. –

+0

Solo una conjetura: PHP anula este encabezado automáticamente. Es posible que use un sistema de 32 bits, por lo que PHP no puede funcionar con enteros más grandes. – Karolis

Respuesta

0

parece como php fundido contenido de longitud a int

+0

Sí, encontré algo así: https://bugs.php.net/bug.php?id=51723 – Michael

0

sí, es sin duda una cosa 32 bits. Bueno, no quiero modificar PHP, volver a compilar ni nada, así que por el momento verifico el tamaño del archivo, y si es más de 2GB, no estoy enviando el encabezado.

gracias a todos por sus comentarios

Cuestiones relacionadas