首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP 5.4的XHP在脚本通过Apache调用时不影响解析器

使用PHP 5.4的XHP在脚本通过Apache调用时不影响解析器
EN

Stack Overflow用户
提问于 2014-09-17 17:12:16
回答 2查看 205关注 0票数 2

我最近从源代码中构建了XHP 1.5,并将其安装在现有的web服务器上。web服务器正在运行PHP5.4.32,Apache2.2.15使用mod_php (而不是CentOS 6.5 )调用PHP。我们现有的所有PHP代码(不依赖新的XHP语法)仍然工作得很好,包括其他扩展,如Imagick、curl和JSON。

使用基于XHP安装测试的测试文件:

代码语言:javascript
运行
复制
<?php
echo "XHP!\n";
exit;
echo <a/>;
?>

在从命令行运行时,此操作与预期的一样。(它打印XHP!然后退出。它不会导致解析器失败,但也不会显示,因为我们没有加载依赖项。)

当我通过Apache获取这个脚本时,我会得到错误。

代码语言:javascript
运行
复制
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运行时却不能工作(甚至不解析)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-29 20:57:49

在详细了解了我的生产服务器(不工作)与我的测试服务器(工作)有什么不同之后,我发现所有服务器都安装了APC 3.1.15,但是在生产中,APC的操作码缓存在/etc/php.d/apc.ini中被禁用:

代码语言:javascript
运行
复制
# BAD NEWS
apc.enable_opcode_cache=0

碰巧,这不是我们想要的,因为不相关的性能原因。

通过在/etc/php.d/apc.ini中更改这一行并重新启动Apache,打开APC的操作码缓存,使得XHP立即开始工作:

代码语言:javascript
运行
复制
# WORKING
apc.enable_opcode_cache=1

我还通过卸载APC来解决这个问题(尽管在我的应用程序中这是不实际的)。

这也解释了为什么它在CLI上工作,而不是在网络上工作--我所有的服务器都有apc.enable_cli=0,所以APC不会干扰来自CLI的XHP。

票数 0
EN

Stack Overflow用户

发布于 2014-09-22 19:24:30

一个可能的原因是PHP版本的不同,特别是因为您是从源代码构建XHP的。在安装了多个PHP版本的共享主机上,我也遇到过类似的奇怪行为。将Apache报告的PHP版本(查看phpinfo()输出)与您在命令行php -v中使用的版本进行比较。如果有什么不同,那可能是你遇到问题的原因之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25896531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档