Apache启动时不会加载PHP扩展

时间:2009-05-17 02:00:30

标签: php windows apache

我已经将php添加为Apache 2.2.11的模块:

LoadModule php5_module "c:/php/php5apache2_2.dll"

还添加了

AddType application/x-httpd-php .php

在PHP.ini中,我的扩展名dir设置为:extension_dir = "C:\php\ext"

,目录正确且所有文件都存在。

但是当我启动apache时,我收到了这些错误:

  

PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_mysql.dll' - 找不到指定的模块。\ r \ n在第0行的未知中
  PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_pdo_pgsql.dll' - 找不到指定的模块。\ r \ n在第0行的Unknown中
  PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_pgsql.dll' - 找不到指定的模块。\ r \ n在第0行的Unknown中发送文件


  [Sun May 17 03:46:01 2009] [通知] Apache / 2.2.11(Win32)PHP / 5.2.9-2配置 - 恢复正常运行
  [Sun May 17 03:46:01 2009] [通知]服务器内置:2008年12月10日00:10:06
  [Sun May 17 03:46:01 2009] [通知]家长:创建子流程4652

  PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_mysql.dll' - 找不到指定的模块。\ r \ n在第0行的Unknown中
  PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_pdo_pgsql.dll' - 找不到指定的模块。\ r \ n在第0行的Unknown中
  PHP警告:PHP启动:无法加载动态库'C:\ php \ ext \ php_pgsql.dll' - 找不到指定的模块。\ r \ n在第0行的Unknown中发送文件


  [Sun May 17 03:46:01 2009] [通知]儿童4652:儿童进程正在运行中   [Sun May 17 03:46:01 2009] [通知]孩子4652:获得起始互斥。
  [Sun May 17 03:46:01 2009] [notice] Child 4652:启动64个工作线程   [Sun May 17 03:46:01 2009] [通知]儿童4652:开始在80号端口听线程。

所以我可能在这里忘记了一些简单的事情,有人能告诉我我忘了什么吗?

11 个答案:

答案 0 :(得分:7)

为了向PHP添加MySQL和PostgreSQL支持,您不仅需要PHP扩展的DLL。您还需要MySQL和PostgreSQL本机库。 PHP扩展的DLL可能找不到它们依赖的DLL,因此它们无法启动。

确保安装了MySQL和PostgreSQL客户端,并将其DLL放入某个可定位的位置。

即。例如:

  • php_mysql.dll依赖于libmysql.dll

所以,确保PHP能够找到libmysql.dll(我相信这个附带了Windows PHP的二进制发行版。但不确定)。

答案 1 :(得分:2)

加入Pablo Santa Cruz的建议。在Windows上,您可以在PATH环境中包含所需的库。 (不一定要复制到Windows文件夹)。加载库时,widows也会在PATH目录中查找。

如果您使用php.net的PHP5.2标准Win32二进制分发版,那么该软件包应该包含软件包根目录中的所有依赖项。因此,如果已将PHP5.2安装到C:\php中,请将此目录添加到PATH envar。重启Apache,我希望扩展能够正确加载。

答案 2 :(得分:1)

这些扩展依赖于MySQL和PostgreSQL二进制发行版提供的本机库。例如,安装它们并将lib放在apache的bin文件夹中。这些分别是LIBMYSQL.DLLLIBPQ.DLL

我通常这样做而不是用它们污染Windows/System32文件夹,因为在我的系统上只有apache / php是这些数据库的客户端,而且它使我的apache / php设置更加便携。

答案 3 :(得分:1)

我在Windows上遇到了特定版本的PHP问题。问题是libmysql。我在php.net网站上发现了一个有相同问题的人发布的错误。

我使用了之前的php发布和libmysql工作。查看您正在使用的php发行版的注释。我认为在特定版本之后,他们提到了一个关于libmysql的新政策。

从你提到的php无法找到扩展名。确保已在php.ini上设置路径,该路径指定扩展所在的位置,扩展名存在以及可以访问该文件夹(读取权限)。

如果全部失败,请尝试将扩展程序移至windows / system32,以查找可能存在的真正问题。

此致

答案 4 :(得分:1)

根据我的经验,Windows上的PHP是背后的主要痛苦。我通常最终会让它继续工作,但至少对我来说,谷歌搜索和试错都很复杂。

所以我终于厌倦了它,只是在虚拟机中安装了Ubuntu Server,并在几分钟内启动并运行。这是否是你的选择,我不能说,但如果是这样,从长远来看,它绝对会给你带来很多麻烦。更不用说你可以随时移动虚拟机,创建快照并完成虚拟机所有其他有趣的东西。

答案 5 :(得分:1)

我遇到了同样的问题。我每次尝试登录phpmyadmin时都会收到其中一个令人讨厌的Windows弹出错误。我键入了用户名和密码,然后抛出错误。

为我解决了什么,还将libmysql.dl复制到apache bin目录。奇怪的是,正确包含的扩展名仍然是我需要这样做的。

答案 6 :(得分:1)

我尝试了其中一些解决方案,其中一个或多个解决了......重新启动是关键所在。我没有在这些更改之间重新启动,但在重新启动后它正在运行:

  • 将postgres DLL添加到apache lib dir
  • 将postgres路径添加到系统路径
  • 将postgres DLL添加到system32

我相信只有PATH会有效,但没有时间在这里清洁,所以你去。

答案 7 :(得分:0)

这里的问题是apache已经加载了PHP,但是PHP无法加载它的扩展名(mysql,postgresql,...)。 我认为你应该以unix格式在php.ini文件中输入路径值(不要使用反斜杠字符作为目录分隔符)。所以在你的php.ini文件中更改:

的extension_dir = “C:/ PHP / EXT”

答案 8 :(得分:0)

我也有同样的问题,并通过将“PostgreSQL”bin路径添加到系统环境变量

来解决

路径:C:\ Program Files \ PostgreSQL \ 8.4 \ bin 你也可以签入phpinfo()。

当我安装PostgreSQL时,设置为系统路径错过了。我手动添加然后重启系统。

答案 9 :(得分:0)

我也有这个问题,并将相关的(.dlls)复制到systen 32,它仍然不适合我。我正在运行Windows 7 64位。为了让我能够工作,我还必须将libmysql.dll复制到ext目录。错误消息使Apache日志和页面加载了有利的响应(建立了连接)。

答案 10 :(得分:-1)

我有同样的问题,并尝试将libmySQL.dll复制到apache bin文件夹,它解决了问题(我正在设置PHP 5.2.5 x64)。 非常感谢。