PHP警告:PHP启动时无法加载动态库php_curl.dll,无法找到。

17

我使用Windows 10和WAMP服务器 (Apache 2.4.9, PHP 5.5.29 VC11 x64, 和 MySQL),一切都运行良好,但现在我需要使用curl扩展。

我打开C:\wamp\bin\php\php5.5.29\phpForApache.ini (从web服务器配置)并删除extension=php_curl.dll的注释。

重新加载apache服务器后,在error_log中我看到:

[22-Sep-2015 13:13:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.5.29/ext/php_curl.dll' - Impossibile trovare il modulo specificato.in Unknown on line 0

DLL文件在正确的文件夹中,并且其他DLL文件也能正常工作。

第一次尝试:我在系统变量路径中添加了:C:/wamp/bin/php/php5.5.29/ext/;c:/wamp/bin/php/php5.5.29/

第二次尝试:我重新下载了php-5.5.29-Win32-VC11-x64.zip文件并替换了php_curl.dll

但我仍然得到相同的结果:index.php

Fatal error: Call to undefined function curl_exec()

phperror_log:

[22-Sep-2015 13:13:30 UTC] PHP Warning: PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.5.29/ext/php_curl.dll' - Impossibile trovare il modulo specificato.in Unknown on line 0


在第0行的未知错误,这很奇怪。你能在 phpinfo(); 中看到curl信息吗? - al'ein
模块作者中仅包含“cURL Sterling Hughes”。 - lbottoni
如果我注释或取消注释php_imap.dll,我会看到加载或未加载模块的信息,但是curl从未工作。 - lbottoni
也许在 Windows 10 中有什么东西。 - lbottoni
1
你还有那个问题吗?当我将另一个curl安装中的libeay32.dllssleay32.dll复制到Apache的bin文件夹中时,问题就解决了。 - Raul Pinto
显示剩余3条评论
7个回答

20

以下步骤对我有用:

  1. 将主PHP文件夹添加到Windows的Path Env变量中(这样libeay32.dll和ssleay32.dll就可以通过路径访问...有些人会将其复制到Windows/System32中以使它们可以通过路径访问,但这不是解决问题的优雅方式)
  2. 将Apache的bin文件夹添加到Windows的Path Env变量中

  3. 将libssh2.dll文件从php文件夹复制到apache的bin文件夹中(Apache似乎需要此文件才能使PHP的curl在Windows上正常工作)


4
只有第三种方法在PHP 5.6.31和Apache 2.4.28上对我起作用。 - ilhan
1
将主要的php文件夹添加到Path Env变量中。 - François Breton
只有第三种方法适用于我的Apache 2.4.48和PHP 8.1.0。非常感谢! - bigben3333
关于“将Apache的bin文件夹添加到Windows的Path环境变量”:只有在添加到系统变量中才对我有效。它无法在“用户名的用户变量”中工作,以免混淆 :) - Nubian
非常感谢。第三个是解决方案。我在Apache的bin目录中有一个不同版本的库。我将其更改为正确的PHP版本。 - David
显示剩余2条评论

15

PHP启动:无法加载动态库'curl'... 在php.ini文件中取消注释2行可以解决此问题

  1. 打开php.ini文件
  2. 删除分号以取消注释;extension_dir = "ext" 如果你的php在C盘下的"php"文件夹中,例如,你的extension_dir = "ext"应该写成extension_dir = "C:\php\ext"
  3. 删除分号以取消注释;extension=curl
  4. 保存php.ini文件

这适用于 PHP 8.x 安装。 - Satelier Diego
在我的php8.2上运行良好,但不要忘记执行service apache2 restart。 - Sideeg MoHammed

7

我的做法:

  1. 我将 libssh2.dll、libcrypto-1_1-x64.dll、libssl-1_1-x64.dll、ssleay32.dll 和 libeay32.dll 复制到 Apache 的 bin 文件夹。也许并不是所有的都需要。

  2. 在 php.ini 中,确保加载了 curl 扩展。这将是 extension=php_curl.dll(针对 php < 7)或 extension=curl(针对 php 7)。

  3. 重启 Apache 服务。


1
对我来说,只需复制 libeay32.dllssleay32.dll 就足够了。 - binford

2

确保在php.ini文件中,如果extension_dir = 未被注释,则其指向正确的路径。


1
另一种可能是apache和php版本不兼容,至少如果您使用wampserver和/或缺少VC++可执行文件。我使用的是php 7.4.11和apache 2.4.27。升级到apache 2.4.46d并安装缺失的可执行文件解决了问题。该版本的apaache还需要将wampserver更新到3.2.5。确保安装了所有的windows VC++可执行文件。有一个小工具可以检查此事。更新和工具可以在https://wampserver.aviatechno.net/找到。
请参见http://forum.wampserver.com/read.php?2,151396 我一次性执行了wampserver/apache更新并安装了一些缺失的VC++文件,因此我无法确定哪个东西实际上修复了加载curl的问题。

在花费了数小时寻找解决方案后,升级Apache解决了我的Curl问题! - Jibato

0

添加到 Apache httpd.conf 文件中:

LoadFile "C:/Php56/libssh2.dll"
LoadFile "C:/Php56/libeay32.dll"
LoadFile "C:/Php56/ssleay32.dll"

-1
我在Windows上使用WAMP时也遇到了同样的错误。当我删除另一个使用PHP的应用程序(引起冲突)并重新安装WAMP后,问题得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接