38

昨天我的帖子的跟进(使用 PHP 启用 cURL

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

我正在使用 Apache 2.2 和 PHP 5.4.14。我使用它们各自的软件包安装了它们;我没有使用 XAMP 或 WAMP。我正在使用 Windows 7 64 位。

任何帮助将不胜感激。

4

13 回答 13

76

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

但是将它们复制到 Apache's ServerRoot、 Apache's \bin\、 Window's \System32\,甚至更糟糕的是复制到 Windows 主目录中是一种糟糕的 hack,甚至可能不适用于较新的 PHP 版本。

正确的做法是将 PHP 路径添加到 WindowsPath变量中。

  1. Control Panel -> System单击高级系统设置或按WIN+R并键入SystemPropertiesAdvanced
  2. 单击按钮环境变量
  3. 系统变量下,您将找到该Path变量。编辑它并添加到它前面C:\PHP;- 或者你的 PHP 文件夹的路径是什么。
    (提示:如果您的 PHP 文件夹包含空格,C:\Program Files\PHP您可能需要在此处使用短文件名形式,即C:\Progra~1\PHP.)
  4. 然后完全停止 Apache 并重新启动它(简单的重启可能不够)。

2017 年 5 月更新:
我更改了上面的说明,将Path变量添加到 PHP 路径之前,而不是附加到它上面。这确保使用 PHP 路径中的 DLL,而不是系统其他路径中的任何其他(过时)版本。

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

2019-10 更新:
提示:要查找这些 DLL 的所有副本并检查是否将它们放置在错误的文件夹中,可以在 Windows 命令提示符窗口中使用以下命令:

dir c:\libeay32.dll /s
dir c:\ssleay32.dll /s

请注意,这些命令在搜索系统驱动器 C: 的整个目录结构时可能需要一些时间才能完成。

2020-08 更新:
如果您的 PHP 文件夹包含空格(即C:\Program Files\PHP),您可能需要Path在步骤 3 的变量中使用短文件名形式(即C:\Progra~1\PHP)。感谢@onee 的提示!

于 2014-10-14T19:03:50.363 回答
16

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

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

libssh2.dll, ssleay32.dll, libeay32.dllphp_curl.dllphp ext文件夹

Apache24\bin从文件夹移动到文件php夹:

libssh2.dll

extension=php_curl.dll另外,不要忘记取消评论php.ini

于 2015-06-12T19:53:09.683 回答
15

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

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

原因:

问题是php_curl.dll在加载时需要访问以下库:libeay32.dll, libssh2.dllssleay32.dll如果将它们放入 . /php/extdir 或者如果您将 PHP 扩展放在 PHP 根目录中。

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

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

简而言之,只需将这三个 dll 放在您在httpd.confServerRoot 指令中指定的目录中,并且php_curl.dll不会再次加载失败。

于 2015-12-20T13:58:19.433 回答
6

You are loading .dll so your OS has to be windows.

First check which php.ini file you are using by running phpinfo()

Then check where your extensions folder is by checking extension_dir attribute in that file.

Next make sure that php_curl.dll is present in that folder. If not copy it over.

Restart apache and check if it works.

Since you installed packages individually, also do this:

Copy the dll file from php_installation_folder/extensions to apache_installation_folder/bin

于 2013-05-07T16:36:57.707 回答
4

通常这是 Apache 和 PHP 之间的 OpenSSL 版本不匹配错误。如果 Apache 将 PHP 作为 DSO 模块加载,将使用其自己的 OpenSSL 版本(dll 和 lib)。因此,如果 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 文件),可能会发生很多事情。

于 2018-07-11T14:13:45.597 回答
2

确保正确加载您的 apache SSH dll。在全新安装中,我必须下载并加载以下 dll “libssh2.dll”到我的 apache bin 目录中

加载 ssl dll 后,cURL 能够毫无问题地加载。

您可以从以下链接下载它:

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

于 2015-06-12T17:40:43.940 回答
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

于 2017-06-28T08:42:13.987 回答
2

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

于 2019-10-28T20:33:03.230 回答
2

插入到文件 httpd.conf

LoadFile "D:/DevKit/PHP7.1/libeay32.dll"
LoadFile "D:/DevKit/PHP7.1/libssh2.dll"
LoadFile "D:/DevKit/PHP7.1/ssleay32.dll"
于 2018-03-28T19:46:18.560 回答
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。

于 2018-03-05T11:01:34.960 回答
0

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

于 2017-02-04T14:13:41.720 回答
0

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

于 2016-12-21T09:39:07.360 回答
0

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

还必须正确设置 PATH 或确保上面提到的 dll(libeay32.dll、libssh2.dll 和 ssleay32.dll)在 Apache 的 bin 目录中(或者很可能是其他答案提到的任何地方)。Apache 无法找到 lib_curl.dll 与无法找到 libssh2.dll 的错误消息相同,这一事实并没有让事情变得更容易弄清楚。

于 2017-01-06T02:23:32.430 回答