之前本人有个使用Discuz程序的论坛挂在别人一台win2003服务器上,跑的是WAMP。因为忙很久没有打理。后来因为部分数据丢失就关闭了。前几天又想重新开,在硬盘上找到了老的数据,是2009年11月的。重新上传到本blog使用的服务器(本人购买的美国VPS服务器),运行出现如下乱码:
IE8下:
Firefox 3.6下:
运行环境是LNMP,相同环境下的WordPress程序http://www.macd11.com却运行很正常,奇怪了。接着Google了一下,网上很多人说这个问题是php版本兼容性导致。因为我使用的是php 5.3.x版本。有些人说把php版本降低到5.2.x就好了。但我觉得5.3版本应该兼容5.2版本,而且又不想降低php版本。先后排查了web目录、数据库目录权限与nginx.conf配置文件,都没发现问题。最后把问题方向确定在php.ini与php-fpm.conf这两个配置文件里。最后发现是php.ini里的short_open_tag参数(此参数表示是否支持短标签的意思)要开启才行。
1.
vim /etc/php.ini
2. 开启short_open_tag参数,支持php短标签。修改为short_open_tag = On,如图所示:
3. wq保存,然后重启php-cgi进程:
/etc/init.d/php-fpm restart
Discuz 7.2程序运行正常了。
关于php.ini 中的short_open_tag和asp_tags的说明:
决定是否允许使用 PHP 代码开始标志的缩写形式(<? ?> )。如果要和 XML 结合使用 PHP,可以禁用此选项以便于嵌入使用 <?xml ?> 。否则还可以通过 PHP 来输出,例如:<?php echo ‘<?xml version=”1.0″‘; ?> 。如果禁用了,必须使用 PHP 代码开始标志的完整形式(<?php ?> )。
注意: 本指令也会影响到缩写形式 <?= ,它和 <? echo 等价。使用此缩写需要 short_open_tag 的值为 On。
asp_tags除了通常的 <?php ?> 标志之外还允许使用 ASP 风格的标志 <% %>。这也包括了输出变量值的缩写 <%= $value %>。
注意: ASP 风格标志的支持是 3.0.4 版新加的。