和平常一样,因为项目的需求,在一台FreeBSD上装PHP的运行环境,处于对FreeBSD的ports的依赖,就直接用ports安装了,一切都很顺利。
装完之后,写了个infophp的文件,在出现的信息里,看到没有加载的文件php.ini,便将php安装时候自带的php.ini重命名一下
- cp php.ini-production php.ini
重启php
- Zabbix01# /usr/local/etc/rc.d/php-fpm restart
- Stopping php_fpm.
- Waiting for PIDS: 9236.
- Starting php_fpm.
本以为一切都会很顺利的完成的,但结果却让人失望。刷新浏览器信息,变成了空白页。上网google,没结果,百度一下,也还是没结果。
对比之前的平台,操作系统版本一致,就是php的版本不一致,怀疑是不是php版本的问题(在安装之前,更新过ports,所以版本教之前的要新),于是乎,就从php官网上找了版本一样的php安装,安装好之后,结果还是一样。
这就奇怪了,操作系统版本是一样的,php版本也是一样的,而且配置文件我也换成一样的了,但还是不行,最后还有一个不同的是,这次是在虚拟化平台上安装的,该不会是虚拟化的原因吧,心里在想着。但想想应该不会的,因为在同样的虚拟化平台上也装有的,都是正常运行的。
网上查了半天也没查到什么结果,起初怀疑过php.ini文件的问题,但后来直接从能够正常运行的机器上拷贝一份过来之后还是一样结果,就没再想过是php.ini的问题了。
然后,各种因素都排除了,在没有php.ini的情况下是正常的,加载了php.ini后就有问题了,那说明是php.ini里配置项有问题,但究竟是哪个配置项的问题呢?确定不了
于是,将php.ini的配置文件打开的项全都关闭,重启php,显示正常了,咦,思路是正确的,然后放入第一个打开项,重启之后,仍然是好的,放入第二项之后,重启之后就不行了,没错,问题就应该是这个项,然后将其打开
- short_open_tag = On
重启PHP之后,就正常了,一切都正常了!
查看一下这个项的注释,是这么说的:
short_open_tag
boolean决定是否允许使用 PHP 代码开始标志的缩写形式(<? ?>
)。如果要和 XML 结合使用 PHP,可以禁用此选项以便于嵌入使用 <?xml ?>
。否则还可以通过 PHP 来输出,例如:<?php echo '<?xml version="1.0"'; ?>
。如果禁用了,必须使用 PHP 代码开始标志的完×××式(<?php ?>
)。
Note:
本指令也会影响到缩写形式
<?=
,它和<? echo
等价。使用此缩写需要short_open_tag
的值为 On。 从 PHP 5.4.0 起,<?=
总是可用的。
原来是这样,info.php文件内容是这样的:
- <?
- phpinfo();
- ?>
而默认的 short_open_tag = Off,就是影响了info.php的解析,将info.php当成非php文件了。所以用curl访问的话,得到的是info.php的文件内容。
问题最终是解决了,但还是有一个疑问,为什么同样的平台,在另外一台服务器上 short_open_tag = Off的情况,还是能正常访问的呢?难道真的也有版本的原因?这个我还没找到答案!
phpinfo是能看到了,但要运行程序的时候,就出现问题了,如zabbix
- HTTP/1.1 500 Internal Server Error
- Server: nginx/0.6.37
- Date: Wed, 17 Oct 2012 06:41:02 GMT
- Content-Type: text/html
- Transfer-Encoding: chunked
- Connection: keep-alive
- X-Powered-By: PHP/5.3.17
最终,为了能正常的运行程序,还是将选项改成了默认。