Em um servidor executando FreeBSD 8.3-RELEASE-p3
, Apache 2.2.22
das portas, PHP version 5.4.6
das portas, a saída está sendo confusa na carga segundo de um script. O comportamento problemático só foi detectado hoje, mas suspeitamos que tenha começado com uma atualização recente dos ports.
Aqui está um script de exemplo:
<?php
// index.php
print 'top of index.php<br>';
require 'blah.php';
print '<br>after require';
?>
<?php
// blah.php
print 'blah';
?>
Na primeira vez após o arquivo ser modificado, esta é a saída:
top of index.php<br>
blah
<br>after require
A segunda (e qualquer chamada subseqüente) para o mesmo script dá uma saída aleatória como ö
ou àœ~cept-Encodin
ou ðš~~
~ '... basicamente, lixo embaralhado. Às vezes, são pedaços do nome do arquivo.
Nos logs de erro do Apache, estamos vendo segfaults e erros do PHP que a função "\ x0" não está definida, apontando para a linha 1 em index.php
acima. Obviamente, print
é uma função definida!
Se alguém salva o arquivo (faz com que o ctime seja alterado), o próximo carregamento exibirá novamente a saída esperada, mas, novamente, quaisquer cargas subsequentes serão distorcidas. Reiniciar o servidor faz isso, exceto que às vezes você pode obter 3-4 cargas antes que o embaralhamento ocorra.
Suspeito que exista um problema com o gzip ou o zlib, alguma outra compressão ou cache opcode ou algo semelhante. No entanto, nosso php.ini é exatamente o mesmo que outro servidor com a mesma configuração e versões que funciona perfeitamente bem.
Se alguém puder me indicar uma possível causa, ou uma maneira eficaz de diagnosticar o problema, agradeço. Eu verifiquei as configurações do php.ini, configurei uma amostra mínima e verifiquei que o zlib está OFF - sem dados.
Tags php apache-2.2