在window环境下搭建我的php(5.6)+nginx+mysql环境(独立安装)。
搭建完毕后尝试在php中使用mysql,但是在调用mysql_connect()函数时,一直报错显示该函数未定义。
然后打印phpinfo(),发现缺少了mysql,在php.ini里将mysql扩展打开后,还是没有,只有mysqlnd。
然后各种谷歌,尝试各种解决方案也没有,最普遍的说法是说在window目录下放入一个dll文件,也是解决不了,话说也没人解释下为什么要放在那里。
然后偶然注意到在phpinfo打印出出来的内容有两个参数:
Configuration
File (php.ini) Path | C:\WINDOWS |
Loaded
Configuration File | none |
以及在php.ini的开头部分有个注释写着:
; 6. The directory from the --with-config-file-path compile time option, or the
; Windows directory (C:\windows or C:\winnt)
查找了一下这方面的资料,原来加载php.ini文件顺序是:如果在
Loaded Configuration File
目录找不到php.ini文件,
就会默认加载Configuration File (php.ini) Path
这里的配置默认信息(不知道这是不是大家说要把扩展文件放这里的原因)。所以一旦Loaded Configuration File
这里为none时,
不管你怎么修改那个配置文件,都是不起作用的。那么现就就要找出为什么不能加载到php.ini的原因了。
下面是我的php.ini的目录 以及启动php.cgi:
RunHiddenConsole.exe
D:\Program Files (x86)\anmp
\php56\php-cgi.exe -b 127.0.0.1:9000 -c
D:\Program Files (x86)\anmp
\php56\php.ini
其实php-cgi.exe可以启动起来。有可能是加载php.ini那句没起作用。路径应该没错。
谷歌不到的情况下我去下载了一个xampp的集成环境。打开mysql扩展,然后打印phpinfo,是有mysql扩展的。
然后将xampp的php整个文件夹放到自主安装的anmp目录下,启动服务。发现还是为none,没有mysql信息。
于是开始猜测是否有可能目录命名有问题:
Program Files (x86)
于是将整个anmp提到D盘目录下,就成了:
D:\anmp
再次启动服务,打印phpinfo,此时就发现有值了:
Loaded
Configuration File | D:\anmp\php56\php.ini |
mysql的信息也有了。
所以整个问题的解决思路我想应该可以归纳到两点:
一是看Loaded Configuration File 的路径是否正确
二是看php.ini的mysql相关扩展是否有打开,dll是否缺少。