升级Apache后HTML/PHP代码解析异常求助
解决Apache 2.2.23下PHP短标签未被解析的问题
你的问题核心是PHP短标签(<? ?>)没有被服务器解析,直接以明文输出了。这是因为Apache 2.2.23搭配的PHP配置里,默认关闭了短标签支持,而之前的2.2.21版本是开启状态。下面是几个可行的修复方案:
方案1:修改全局php.ini配置
这是最彻底的解决方法:
- 首先找到你的PHP配置文件
php.ini的位置,可以通过在PHP脚本里执行phpinfo()查看,或者在终端运行命令:php --ini - 打开
php.ini,找到short_open_tag选项,把它的值改成On:short_open_tag = On - 保存文件后,重启Apache服务(不同系统命令不同,比如Ubuntu是
service apache2 restart,CentOS是httpd restart)。
方案2:通过.htaccess局部配置(如果有权限)
如果你无法修改全局php.ini,可以在项目根目录的.htaccess文件里添加以下配置:
php_value short_open_tag On
⚠️ 注意:这个方法生效的前提是Apache的虚拟主机配置里,AllowOverride设置为All或者包含Options,否则.htaccess的PHP配置不会被加载。
方案3:替换短标签为完整PHP标签(兼容性最好)
为了避免后续环境变动再出现类似问题,建议直接把代码里的短标签<? ?>替换成完整的PHP标签<?php ?>,也就是把:
<?=$this->tempdir?>
改成:
<?php echo $this->tempdir; ?>
这种写法在任何PHP环境下都能正常解析,不需要依赖短标签的配置。
为什么升级后会出现这个问题?
PHP从5.4版本开始,short_open_tag默认是开启的,但部分Apache发行版(比如某些Linux系统的官方包)在打包时可能会默认关闭这个选项,或者你之前的服务器是手动开启的,升级Apache后配置被重置成了默认值,导致短标签无法被解析。
内容的提问来源于stack exchange,提问作者Cyrus Jia
相关产品推荐
相关产品推荐

