我最近从源代码中构建了XHP 1.5,并将其安装在现有的web服务器上。web服务器正在运行PHP5.4.32,Apache2.2.15使用mod_php (而不是CentOS 6.5 )调用PHP。我们现有的所有PHP代码(不依赖新的XHP语法)仍然工作得很好,包括其他扩展,如Imagick、curl和JSON。
使用基于XHP安装测试的测试文件:
<?php
echo "XHP!\n";
exit;
echo <a/>;
?>
在从命令行运行时,此操作与预期的一样。(它打印XHP!然后退出。它不会导致解析器失败,但也不会显示,因为我们没有加载依赖项。)
当我通过Apache获取这个脚本时,我会得到错误。
Parse error: syntax error, unexpected '<' in /var/www/html/bloom/play.php on line 4
通过Apache获取phpinfo()显示XHP已经加载,extension_loaded("xhp")通过Apache返回true。
是什么原因导致XHP在命令行中工作,但在通过Apache运行时却不能工作(甚至不解析)?
发布于 2014-09-29 20:57:49
在详细了解了我的生产服务器(不工作)与我的测试服务器(工作)有什么不同之后,我发现所有服务器都安装了APC 3.1.15,但是在生产中,APC的操作码缓存在/etc/php.d/apc.ini
中被禁用:
# BAD NEWS
apc.enable_opcode_cache=0
碰巧,这不是我们想要的,因为不相关的性能原因。
通过在/etc/php.d/apc.ini
中更改这一行并重新启动Apache,打开APC的操作码缓存,使得XHP立即开始工作:
# WORKING
apc.enable_opcode_cache=1
我还通过卸载APC来解决这个问题(尽管在我的应用程序中这是不实际的)。
这也解释了为什么它在CLI上工作,而不是在网络上工作--我所有的服务器都有apc.enable_cli=0,所以APC不会干扰来自CLI的XHP。
发布于 2014-09-22 19:24:30
一个可能的原因是PHP版本的不同,特别是因为您是从源代码构建XHP的。在安装了多个PHP版本的共享主机上,我也遇到过类似的奇怪行为。将Apache报告的PHP版本(查看phpinfo()输出)与您在命令行php -v
中使用的版本进行比较。如果有什么不同,那可能是你遇到问题的原因之一。
https://stackoverflow.com/questions/25896531
复制相似问题