我最近从 apt-get 在我的 Ubuntu 12.10 上安装了 PHP 5.4。
PHP Info 显示:PHP 版本 5.4.6-1ubuntu1
我只是安装了所有常见的包,如 mysql、pgsql、curl 等,没有进行任何其他更改,但我遇到了问题。
我喜欢在我的文件和数据库中使用 ISO-8859-1/latin1 编码,因为这是我获得最佳工作流程的地方。现在我遇到了一个问题,因为 PHP 似乎无法处理消息以这种方式编码的异常。
好吧,为了更好地澄清它,我创建了一个这样的测试文件:
ini_set('display_errors', 1);
error_reporting(E_ALL);
throw new Exception('é');
如果上面的代码在一个 utf-8 文件中,那就没问题了,启用 Xdegub 我得到:
( ! ) Fatal error: Uncaught exception 'Exception' with message 'é' in /home/henrique/public/teste.php on line 5
( ! ) Exception: é in /home/henrique/public/teste.php on line 5
Call Stack
# Time Memory Function Location
1 0.0002 124212 {main}( ) ../teste.php:0
如果文件在 ISO-8859-1 中,如果启用了 Xdebug,问题只是没有显示消息:
( ! ) Fatal error: in /home/henrique/public/teste.php on line 5
( ! ) Exception: in /home/henrique/public/teste.php on line 5
Call Stack
# Time Memory Function Location
1 0.0002 124436 {main}( ) ../teste.php:0
但是,如果没有 Xdebug,我得到的只是这个“非常清楚”的消息:
Fatal error: in /home/henrique/public/teste.php on line 5
也许这是 Apache 中的一个问题,因为当我使用命令行尝试相同的操作时,我得到:
Stack trace:
#0 {main}
thrown in /home/henrique/public/teste.php on line 5
Fatal error: Uncaught exception 'Exception' with message '�' in /home/henrique/public/teste.php on line 5
Exception: � in /home/henrique/public/teste.php on line 5
Call Stack:
0.0002 121256 1. {main}() /home/henrique/public/teste.php:0
该消息仍然存在,但是,难以辨认,但是是否存在...
编辑
我也尝试过使用 Lighttpd 1.4.28,结果是一样的。
编辑2:
尝试使用 PHP 5.4 内置服务器并在我的终端上得到了这个:
[Wed Jun 5 21:32:08 2013] PHP Fatal error: Uncaught exception 'Exception' with message '�' in /var/www/test2.php:9
Stack trace:
#0 {main}
thrown in /var/www/test2.php on line 9
[Wed Jun 5 21:32:08 2013] 127.0.0.1:55116 [200]: /test2.php - Uncaught exception 'Exception' with message '�' in /var/www/test2.php:9
Stack trace:
#0 {main}
thrown in /var/www/test2.php on line 9
但是在浏览器中,还是同样的问题。