PHP无法加载php_curl.dll扩展

时间:2013-05-07 16:31:02

标签: php curl

昨天的帖子(Enabling cURL with PHP

后续跟进

问题是PHP无法加载php_curl.dll。我已经尝试了几个步骤,包括取消注释extension=php_curl.dll,确保路径中的依赖项libeay32.dllssleay32.dll为eixst,重新下载php_curl.dll,替换旧的,最后复制将文件存入我的System32文件夹。

我正在使用Apache 2.2和PHP 5.4.14。我使用他们的个人包安装了两个;我没有使用XAMP或WAMP。我正在使用Windows 7 64位。

任何帮助都将不胜感激。

13 个答案:

答案 0 :(得分:61)

libeay32.dllssleay32.dll必须是路径可访问的php_curl.dll加载才能成功。

但是将它们复制到Apache的ServerRoot,Apache的\bin\,Window的\System32\,或者更糟糕的是将它们复制到Windows主目录中是一个糟糕的黑客,甚至可能不适用于较新的PHP版本。

正确的方法是将PHP路径添加到Windows Path变量中。在Control Panel -> System点击高级系统设置,然后使用按钮环境变量。在系统变量下,您会找到Path变量。编辑它并追加; C:\ PHP C:\PHP;添加到它之前 - 或者PHP文件夹的路径是什么。然后完全停止Apache并再次启动它(简单的重启可能还不够)。

更新2017-05:
我将上面的说明更改为 prepend 使用PHP路径的Path变量而不是追加。这样可以确保使用PHP路径中的DLL,而不是系统其他路径中的任何其他(过时的)版本。

更新2018-04:
如果已经选择了错误的方法并将任何PHP DLL复制到Apache或Windows路径,那么我强烈建议您再次删除它们!如果不这样做,以后尝试更新PHP时可能会遇到麻烦。如果新的PHP版本带来了这些DLL的新版本,但您的旧DLL仍然在系统或Web服务器路径中停留,则可能首先找到这些旧的DLL。这肯定会阻止PHP解释器启动。这些错误很难理解和解决。因此,如果您将它们复制到那里,那么最好清理现在并从Windows和Apache路径中删除任何提到的DLL。
(感谢@EdmundTam和@WasimA。在评论中指出了这个问题!)

答案 1 :(得分:15)

在PHP 5.6.x版本中,您应该执行以下操作:

Windows\system32文件夹移至php文件夹DLL:

来自libssh2.dll, ssleay32.dll, libeay32.dll文件夹

php_curl.dllphp ext

Apache24\bin文件夹移至php文件夹:

libssh2.dll

此外,请不要忘记在extension=php_curl.dll

中取消注释php.ini

答案 2 :(得分:14)

WINDOWS Apache 2.4.x + PHP 7.0.x解决方案:

解决方案:将libeay32.dll,libssh2.dll,ssleay32.dll文件放在httpd.conf的ServerRoot指令中指定的目录下。可以在php根文件夹下找到这些dll。

原因:

问题是php_curl.dll在加载时需要访问以下库:libeay32.dll,libssh2.dll,ssleay32.dll如果你将它们放在./php/ext目录中或者你放入php扩展名它没有意义在php root dir。

当然你可以将它们放在c:\ Windows或PATH中定义的某个全局文件夹中,但如果你不想这样做,你希望你的apache + php安装是可移植的:

httpd.conf中ServerRoot中指定的路径被视为php的主路径。行为类似于在./index.php中包含./path/to/some.php文件的情况,some.php文件的主路径仍然是./ index.php所在的目录。

简而言之,只需将这三个dll放在httpd.conf ServerRoot指令中指定的目录中,并且php_curl.dll将无法再次加载。

答案 3 :(得分:6)

您正在加载.dll,因此您的操作系统必须是Windows。

首先通过运行php.ini

检查您正在使用的phpinfo()个文件

然后检查该文件中的extension_dir属性,检查扩展文件夹的位置。

接下来确保该文件夹中存在php_curl.dll。如果不复制它。

重新启动apache并检查它是否有效。

由于您单独安装了软件包,所以也这样做:

将dll文件从php_installation_folder/extensions复制到apache_installation_folder/bin

答案 4 :(得分:2)

确保正确加载apache SSH dll。在一个全新的安装我不得不下载并加载到我的apache bin目录下面的dll“libssh2.dll”

加载ssl dll后,cURL能够加载而没有任何问题。

您可以从以下链接下载:

http://windows.php.net/downloads/pecl/releases/ssh2/0.12/

答案 5 :(得分:2)

解决方案:

Step1: Uncomment the php_curl.dll from php.ini

Step2: Copy the following three files from php installed directory.i.e "C:\\php7".

libeay32.dll,
libssh2.dll,
ssleay32.dll

Step3: Paste the files under two place

httpd.conf's ServerRoot directive. i.e "C\Apache24"
apache bin directory. i.e "C\Apache24\bin"

Step4: Restart apache.

这就是全部。我通过这种方式解决问题。希望它可能适合你。

这里给出了解决方案。 https://abcofcomputing.blogspot.com/2017/06/php7-unable-to-load-phpcurldll.html

答案 6 :(得分:2)

在尝试了所有内容之后,我只需将Apache升级到更新版本,以便curl扩展功能正常运行。

我正在将PHP从7.0.2升级到7.1.15,之后curl无效。修复它的唯一方法是将Apache(版本2.4.18)升级到最新的2.4.29。

没有必要将任何lib / ssleay dll文件复制到Apache或Windows - 可能是因为我的系统路径中已经有PHP文件夹了。

运行Windows 10,64位线程安全版本VC14。

答案 7 :(得分:1)

插入文件httpd.conf

LoadFile "D:/DevKit/PHP7.1/libeay32.dll"
LoadFile "D:/DevKit/PHP7.1/libssh2.dll"
LoadFile "D:/DevKit/PHP7.1/ssleay32.dll"

答案 8 :(得分:1)

通常,这是Apache和PHP之间的OpenSSL版本不匹配错误。如果Apache将PHP作为DSO模块加载,则将使用其自己的OpenSSL版本(dll和libs)。因此,如果PHP扩展需要较新的版本,则它可能无法在Apache加载的DLLS中找到合适的接口,并且将无法正常工作。

由于需要加载PHP扩展,因此需要相关的DLL文件至少是PHP模块要求的版本。 假设您正在为Apache和PHP使用最新的版本,并且都使用相同的MVC版本构建,则可以复制以下文件:

  • libcrypto-1_1.dll
  • libcrypto-1_1-x64.dll
  • libcurl.dll
  • libsasl.dll
  • libssh2.dll
  • libssl-1_1.dll
  • libssl-1_1-x64.dll
  • nghttp2.dll
  • libeay32.dll(如果您的PHP发行版中存在)
  • ssleay32.dll(如果您的PHP发行版中存在)

从PHP根文件夹到Apache2 / bin文件夹,以防您确信PHP构建比Apache构建新。

相反,您可以将相同文件从Apache BIN复制到PHP根目录。

无论如何,请事先备份APache和PHP文件夹的内容。

将PHP路径添加为环境变量将优先使用该路径来加载相关的DLL,并且可以解决该问题。但是,您将失去服务器的可移植性。此外,如果您还添加了Apache PATH作为变量,并且OpenSSL版本有所不同(最多加载不同的链接DLL文件),则可能会发生很多问题。

答案 9 :(得分:1)

在php.ini中,您必须放置extension_dir静态路径。以extension_dir = "C:\laragon\bin\php\php-7.3.11-Win32-VC15-x64\ext"为例。不要忘记在此变量之前删除分号。

答案 10 :(得分:0)

之前我遇到过同样的问题。我通过将php目录添加到windows系统环境变量--- Path来解决它。

答案 11 :(得分:0)

我收到此错误是因为,至少在我的系统上,如果php.ini中的extension_dir设置为相对路径,则将其视为相对于根Apache目录,以便将其指向到正确的目录我必须使用绝对路径:"C:\Program Files (x86)\PHP\ext"。 (这是Windows 5.5上的PHP 5.5.31和Apache 2.4.23;将extension_dir设置为ext在Windows 7上使用相同的设置工作得很好。我首先通过放置ext目录来实现它在具有必要dll的Apache文件夹中,然后弄清楚发生了什么。)

还必须正确设置PATH或确保上面提到的dll(libeay32.dll,libssh2.dll和ssleay32.dll)位于Apache的bin目录中(或者很可能是任何一个地方)其他答案提及)。事实上,我得到了相同的错误信息,因为Apache无法找到libssh2.dll,因此无法找到lib_hp.dll,但这并没有让事情变得更容易理解。

答案 12 :(得分:0)

将您的php文件夹路径添加到系统路径,一切都应该正常工作。它还将修复一些其他破坏的扩展。