环境:Windows server 2008 + Apache 2.4.3 + PHP 5.3.20
发生的情况是一台完全正常运作的环境,ghost 整个系统后,安装到第二台当备援主机,
结果第二台的系统启动正常,但网页一片空白。
因为 MIS 搞不定,所以我就接过来找问题.....
网页空白当然马上直觉是 PHP 错误,查了 log 数据夹却没有 php error 档案 (!?)
然后开始 PHP 除错 + 心里暗骂OOXX (因为要找好几层) ,发现了几个诡异的状况
1. session_start() 有成功,但是指定储存 session 的数据夹中却没有档案
2. 终于印出错误讯息 Fatal error: Call to undefined function mysql_connect() ,但检查 php.ini 确定有设定加载 mysql ,dll 档案也存在
印出 phpinfo() 只有 mysqlnd 函式库 ,却没有 mysql,而 error_log 设定值为空值
(我知道 mysql 函式库要废掉了~不过程序写的很差...嗯...打算死期到了的时候再医...)
Apache 到底吃到哪一个 php 设定档了 !?
httpd.conf 跟 php 安装有关的设定指令只有两行
PHPIniDir "C:\xxxxx\PHP\"
LoadModule php5_module "C:\xxxxx\PHP\php5apache2_4.dll"
然后我在正常运作的撰写环境做了测试,想要测出异常的环境情况
1. 把 php.ini 删掉,完全没有 .ini 设定档 => 重新启动 Apache phpinfo() 可执行 (震惊,怎么能跑 php ?)
2. 把 PHPIniDir "C:\xxxxx\PHP\" 批注起来 => 重新启动 Apache phpinfo() 可执行 (再次震惊,这个也是不必要的吗?)
3. 把 LoadModule php5_module "C:\xxxxx\PHP\php5apache2_4.dll" 批注起来,PHP 果然没启动了 (不然我以为我改到错的 httpd.conf )
而 1 跟 2 印出的 phpinfo() ,参数设定跟异常环境相同,只有 mysqlnd ,error_log 没有设定值
大胆推论(我没爬官方文件...),PHP 参数有默认值,没有 php.ini 档案也没关系
但是为什么有 php.ini , PHPIniDir "C:\xxxxx\PHP\" 会没有作用?
虽然台的环境用相同的设定档是正常,但想到我被斜线阴了几次的经验
(不知道为何 "不只一个人" 有文件参考可以copy,却还是习惯自己手 key 参数值,导致调整完后 apache 无法启动,让我找到眼睛脱窗都找不到错误 ="=)
马上改成正斜线 PHPIniDir "C:/xxxxx/PHP/" 重新启动! 阿母~我出运了!抓到 php.ini 的设定了!www.it165.net
证明这次又是反斜线阴我,尤其是 N 台计算机都可以吃这个设定,就今天这台主机反骨....
( 而且被 ghost 前的环境是能正常跑相同参数值的 = =??? 莫非是 ghost 让它的个性变了吗? )
另外我想要证明反斜线不是我恍神打的 (台的设定档是我调的) ,
虽然我每次也会搞不清楚要打正的还是反的,但是安装 php 的执行档会自动修改 httpd.conf 增加 php 参数
我一向秉持着原本打什么斜线,调整设定时我就打相同的斜线,绝‧对‧不‧手‧贱 !
因此开启了备份的 php.exe 安装档,重新让它安装 php
测试结果,的确是在自动安装文件时添加的路径为 反斜线\
以后要记得 PHP 的安装档执行完后,要检查路径为正斜线 /
(正斜线就是由右到左)
最后有个小插曲,
在写这篇文章的时候,想把我正常的撰写环境再弄成相同的异常环境,
把 PHPIniDir "C:/xxxxx/PHP/" 批注后 apache 重启,居然还是有原本 php.ini 的设定 !?
我又再度傻眼了,到底是内存有暂存还是我的结论是错的?
愤怒的重开机后,phpinfo() 中就抓不到 php.ini 的设定值了,呈现异常环境的状态。
好险上面一整篇的 complain 文章没白打。
(今天的运气超不好)
/* 2013.5.29 补充 */
今天早上请前同事(美工)帮我查新版 wamp 的 httpd.conf 设定
在她的环境 wamp 是没有 PHPiniDir 这个参数,却能正确抓到 php.ini 里设定值
想必事情不单纯.....(沉思)
该不会是我 上一篇 说的环境变量吧(!)
马上查了我的撰写环境、正式环境 跟 备援环境(也就是异常的那台)
果然只有正式环境有设定系统环境变量...另外两个都是没设定的
所以我算是误打误撞的刚好用到两台没设环境变量的计算机找问题
PHPRC 这个环境变量对 PHP 的重要性,相当于 JAVA 的 JAVA_HOME 阿....
将 PHPRC 及 Path 修正正确后,在 httpd.conf 中没有设定 PHPiniDir 也没有关系了。
也证明 N 台计算机没出事是因为有设 PHPRC 的关系,
ghost 档案刚好是旧备份,所以没有记录到之后调动的环境变量(结案)