繁体   English   中英

Apache启动时不会加载PHP扩展

[英]PHP extensions won't load on Apache startup

我已经添加了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行的未知中
PHP警告:PHP启动:无法加载动态库'C:\\ php \\ ext \\ php_pgsql.dll' - 找不到指定的模块。\\ r \\ n在第0行的未知中

[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行的未知中
PHP警告:PHP启动:无法加载动态库'C:\\ php \\ ext \\ php_pdo_pgsql.dll' - 找不到指定的模块。\\ r \\ n在第0行的未知中
PHP警告:PHP启动:无法加载动态库'C:\\ php \\ ext \\ php_pgsql.dll' - 找不到指定的模块。\\ r \\ n在第0行的未知中

[Sun May 17 03:46:01 2009] [通知]儿童4652:儿童过程正在运行
[Sun May 17 03:46:01 2009] [notice] Child 4652:获得了启动互斥。
[Sun May 17 03:46:01 2009] [notice] Child 4652:启动64个工作线程。
[Sun May 17 03:46:01 2009] [notice] Child 4652:启动线程侦听端口80。

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

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

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

IE示例:

  • php_mysql.dll依赖于libmysql.dll

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

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

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

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

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

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

  • 将postgres DLL添加到apache lib目录
  • 将postgres路径添加到系统PATH
  • 将postgres DLL添加到system32

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

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

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

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

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

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

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

问候,

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

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

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

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

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

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

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

的extension_dir = “C:/ PHP / EXT”

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM