我对Windows Server 2008 R2上的PHP有一个非常恼人的问题。 IIS和Apache在同一台机器上运行(Apache嵌入了另一个产品,并且这不是我的选择)。Apache不会加载PHP的MySQL扩展,但IIS不会
IIS配置为能够使用PHP的多个版本,并没有在那里的PHP版本中已安装的Windows安装程序(这样的php.exe不在路径存在)。
Apache使用PHP的一个特定版本(5.2.5线程安全的 - 我又不能改变这是一个第三方应用程序对这一版本编译PHP扩展)。
如果我检查我的Apache站点中的phpinfo(),它没有MySQL的条目,即使在php.ini中启用了php_mysql.dll并且它存在于\ ext目录中。如果我(暂时)将这个版本的PHP(相同的目录,相同的php.ini)添加到IIS并使用phpinfo()设置测试网站,它会正确列出MySQL。我知道这不仅是phpinfo的一个奇怪的问题,因为我有一个基于MySQL的PHP网站在Apache中运行,它失败了Call to undefined function mysql_connect()
有人建议我将libmysql.dll从PHP目录复制到C:\ Windows \ System32但这没有什么区别。由于服务器上有多个PHP版本,我想可能是加载了错误版本的libmysql.dll,但PATH不包含任何包含libmysql.dll的目录。
IIS和Apache正在寻找在完全相同的PHP安装,php.ini中,和ext目录,但只有IIS可以加载MySQL扩展。 Apache是默认的系统帐户,因为它看起来像系统有权访问所有的DLL。
Apache日志没有说明任何DLL无法加载。我在事件日志中记录了PHP错误,但没有任何关于这些扩展的报告。
解决这个问题谷歌搜索后,我发现其他突然发生的问题在PHP中的Windows服务器,但通常分辨率上 - 重建php.ini文件,重新启动IIS,重新启动服务器 - 并没有帮助。
任何关于下一步的建议都非常感谢!
您是否检查到c:\%php_5.2.5_install_path $ \中的dll被复制到C:\ Windows \ System32?例如'libmysql.dll'或'libmhash.dll'。我知道这是Apache + PHP所必需的,不确定是否需要IIS + PHP – JScoobyCed 2012-03-27 02:06:01
@JScoobyCed这听起来很有希望,但我也有在IIS中工作的PHP 5.3.10,它目前在连接到MySQL时没有问题。是否存在将5.2.5 DLL复制到System32会对5.3.10产生负面影响的风险? – tomfumb 2012-03-27 16:25:01
如果System32中已经存在5.3.10 DLL,是的,可能会影响PHP 5.3.10 – JScoobyCed 2012-03-28 01:22:36