我正在日本的服务器上部署一个应用程序。该应用程序是我公司销售的产品,已成功安装在许多其他服务器上,没有出现此类问题。该应用程序使用 PHP/CodeIgniter 编写,并且相同的软件包已在其他服务器上成功测试。
问题是 - 应用程序只显示一些问号(然后它因错误而死机,即找不到某个类,尽管相同的代码在其他服务器上可以运行)。一些应用程序文件使用 Zend Guard 编码 - Zend Optimizer 在两个服务器上都可用。我尝试/发现:
1)两台服务器上的主要 PHP 版本相同 - 5.2.x
2)Zend Optimizer 版本相同 - 3.3.9
3)问号实际上是问号 - 使用 wget 将输出传输到文件并在十六进制编辑器中打开它 - 该文件主要包含 3F,中间有一些随机的十六进制符号:
0000000: 3f3f 3f3f 3f3f 3f3f 3f3f 3f01 3f3f 3f3f ???????????.????
0000010: 3f3f 3f3f 3f3f 3f3f 3f3f 203f 3f3f 3f3f ?????????? ?????
0000020: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000030: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000040: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000050: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000060: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000070: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000080: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000090: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000a0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000b0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000c0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000d0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000e0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
00000f0: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000100: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000110: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000120: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
0000130: 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f 3f3f ????????????????
4)我怀疑问题与 PHP 设置有关 - 到目前为止,我已尝试在 php.ini 中将 default_charset 设置为“utf-8”,但这并没有改变任何东西。
5) 应用程序崩溃时预期的输出应为无输出 - 根本没有输出。相反,我得到了上面的输出(它继续以这种方式运行)。
6)PHP 作为模块在 Apache 下运行。
有什么想法可能导致这种情况吗?通过 scp 存档并在服务器上解压缩,将文件复制到服务器。
这些是响应标头 - 我没有看到任何可疑的东西。
Date Mon, 31 Jan 2011 16:09:34 GMT
Server Apache/2.0.63 (Red Hat)
Content-Length 5339
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type text/html; charset=utf-8
我首先在 stackoverflow.com 上提出了这个问题,但决定在这里重新发布:https://stackoverflow.com/questions/4852122/php-outputs-question-marks
编辑:我想我已经找到了一些线索 - 问题出在 Zend Optimizer 上。替换编码文件有所帮助,输出符合预期。这又带来了另一个问题 - 如何判断 Zend Optimizer 出了什么问题?编码文件在不同的服务器上使用相同版本的 Zend Optimizer 进行了测试,运行良好。服务器上的 PHP 版本为 5.2.14,可以正常工作,而服务器上的 PHP 版本为 5.2.13,编码文件无法正常工作。
答案1
php.ini文件:
zend_optimizer.enable_loader=0
但这个错误已经够神秘了……