第二次加载脚本后输出乱码

第二次加载脚本后输出乱码

在运行 的服务器上FreeBSD 8.3-RELEASE-p3Apache 2.2.22从端口,PHP version 5.4.6从端口,输出在第二脚本加载。今天才检测到有问题的行为,但我们怀疑这是由最近的端口更新引起的。

以下是示例脚本:

<?php
    // index.php
    print 'top of index.php<br>';
    require 'blah.php';
    print '<br>after require';
?>

<?php
    // blah.php
    print 'blah';
?>

文件第一次修改后,这是输出:

top of index.php<br>
blah
<br>after require

对同一脚本的第二次调用(以及任何后续调用)会产生随机垃圾输出,例如这个öàœ~cept-Encodinðš~~~`... 基本上是乱码垃圾。有时它是文件名的块。

在 Apache 错误日志中,我们看到了段错误和 PHP 错误,指出函数“\x0”未定义,指向上面的第 1 行index.php。显然,print这是一个已定义的函数!

如果保存了文件(导致 ctime 发生变化),下一次加载将再次显示预期的输出,但任何后续加载都会再次出现乱码。重新启动服务器即可实现这一点,但有时在发生混乱之前,您可以进行 3-4 次加载。

我怀疑 gzip 或 zlib 或其他压缩或操作码缓存等存在问题。但是,我们的 php.ini 与另一台具有相同设置和版本的服务器完全相同,并且运行正常。

如果有人能告诉我可能的原因,或者进一步诊断问题的有效方法,我将不胜感激。我检查了 php.ini 设置,设置了最小样本,并验证了 zlib 是否已关闭 - 没用。

相关内容