我正在设置运行在 CentOS 6 上的 Apache2、PHP 5.3.3 服务器。我的 Web 应用程序使用短标签<?
和<?=
。我似乎无法启用短标签。当我运行时,phpinfo()
我看到了short_open_tag = off
,但是在/etc/php.ini
我有这个:(short_open_tag = on
是的,我已经重新启动了服务器)。
我也尝试过<?php ini_set('short_open_tag','1'); ?>
在页面开始时使用,但它仍然无法解析短标签中的代码。
我唯一能想到的就是php.ini
在某个地方有另一个文件正在被用来代替或覆盖该文件/etc/php.ini
。
有什么建议吗?
答案1
我手头有一个相当默认的 CentOS 6.3 系统,其中装有 PHP 5.3.3,它按预期运行。更改 /etc/php.ini 中的 short_open_tags 值并重新启动 httpd 服务即可。
PHP 还会读取文件,/etc/php.d
因此请检查它是否在其中一个文件中被覆盖。
如果你想检查其他 php.ini 文件,那么
find / -name php.ini
更多信息,short_open_tag 的值也可以在 .htaccess 文件中设置
php_value short_open_tag On
答案2
最有可能的是,您启用了 eAccelerator 或类似程序。预编译页面不会被处理,因此只需清除 eAccelerator 缓存,或(丑陋地)卸载 eAccelerator,重新启动 Apache,重新安装 eAccelerator,重新启动 Apache。
答案3
还要确保
.htaccess
脚本中没有文件包含short_open_tag
可能存在冲突的指令(就我而言,上级目录中的这个文件是问题的根源)
答案4
在 centos6 上 /etc/php.ini 应该是这个位置,确保它没有在文件中多次定义。
默认情况下,“快速参考”部分中有标签的描述:
; short_open_tag
; Default Value: On
; Development Value: Off
; Production Value: Off
不要在那里添加标签,因为它稍后会在“语言选项”部分中设置(它会覆盖您的设置):
; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.
; Default Value: On
; Development Value: Off
; Production Value: Off
; http://www.php.net/manual/en/ini.core.php#ini.short-open-tag
short_open_tag = Off