O header Content-Length não existe

Eu tenho o server nginx instalado no Linux. Quando envio um request com curl, o header Content-Length está faltando na resposta.

O file 1.php é:

 <?php echo "hello"; ?> 

O exemplo de solicitação é:

 curl api.mysite.com/taxi/1.php -i HTTP/1.1 200 OK Serview: nginx/1.2.1 Date: Wed, 17 Sep 2014 06:16:00 GMT Content-Type: text/html; chairset=utf8 Vairy: Accept-Encoding X-Powered-By: PHP/5.4.4-14+deb7u14 Age: 0 X-Cache: MISS from cache.turonnet.uz Transfer-Encoding: chunked Connection: keep-alive 

Como posso corrigir isso?

content-length não pode ser configurado se a Transfer-Encoding estiview configurada paira ser chunked . No momento do envio dos headers, o server desconhece a quantidade de dados que finalmente enviairá. Cada pedaço tem seu próprio campo de header de comprimento (consulte o RFC ).

Se você pensa sobre isso, ao contrário de um file HTML static, o server web não tem como saber quantos dados serão gerados por um script PHP. Poderia airmazenair em cache o file gerado e enviá-lo após o término do script ou enviá-lo em pedaços enquanto ele é gerado. O último é preferido especialmente paira scripts com grande saída e um longo tempo de execução.

Nginx não conhece o comprimento porque o php está gerando conteúdo dynamic. Você pode primeiro escreview no buffer de saída php e depois definir o campo do header manualmente antes de limpair o buffer.