【发布时间】:2012-03-27 01:35:55
【问题描述】:
我对 Windows Server 2008 R2 上的 PHP 有一个非常恼人的问题。 IIS 和 Apache 运行在同一台机器上(Apache 嵌入了另一个产品,它不是我的选择)。
IIS 被配置为能够使用多个版本的 PHP,并且那里的所有 PHP 版本都没有使用 Windows 安装程序安装(因此路径中不存在 php.exe)。
Apache 使用一个特定版本的 PHP(5.2.5 线程安全 - 我无法更改这一点,因为第 3 方应用程序已针对此版本编译了 PHP 扩展)。
如果我在我的 Apache 站点中检查 phpinfo(),它没有 MySQL 条目,即使 php_mysql.dll 在 php.ini 中启用并且它存在于 \ext 目录中。如果我(临时)将此版本的 PHP(相同目录,相同 php.ini)添加到 IIS 并使用 phpinfo() 设置测试站点,它会正确列出 MySQL。我知道这不仅仅是 phpinfo 的一些奇怪问题,因为我有一个在 Apache 中运行的基于 MySQL 的 PHP 站点,它以 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 错误,但没有关于这些扩展的任何报告。
在谷歌搜索该问题后,我发现 Windows 服务器上 PHP 中突然出现的其他问题,但通常的解决方法 - 重建 php.ini、重新启动 IIS、重新启动服务器 - 没有帮助。
非常感谢任何关于下一步看哪里的建议!
【问题讨论】:
-
您是否检查过 c:\%php_5.2.5_install_path$\ 中的 DLL 是否已复制到 C:\Windows\System32 ?例如“libmysql.dll”或“libmhash.dll”。我知道 Apache+PHP 需要这个,不确定 IIS+PHP
-
@JScoobyCed 这听起来很有希望,但我也有 PHP 5.3.10 在 IIS 中工作,它目前连接到 MySQL 没有问题。将 5.2.5 DLL 复制到 System32 是否存在对 5.3.10 产生不利影响的风险?
-
如果 System32 中已经存在 5.3.10 DLL,是的,存在影响 PHP 5.3.10 的风险
-
不幸的是,复制 libmysql.dll 并没有解决问题,但我确实发现服务器上的其他地方有几个同名的文件。例如 MySQL 工作台就有一个。 MySQL 工作台在路径上,所以也许这个 DLL 正在由 PHP 5.2.5 加载? C:\Windows\System32 是路径上的第一个条目,MySQL 工作台接近尾声,所以我希望我复制到 System32 的 DLL 优先 - 也许不是这种情况?
-
你加载了哪些模块?其中很多没有出现在附加模块标题下(这是您正在谈论的列表吗?)我自己使用
php_info()的列表是空的,但如果我使用get_loaded_extensions(),我有一个包含35 个模块的列表。我相信“附加模块”是指第三方模块?
标签: apache windows-server-2008-r2 php