昨天的帖子(Enabling cURL with PHP)
后续跟进问题是PHP无法加载php_curl.dll。我已经尝试了几个步骤,包括取消注释extension=php_curl.dll
,确保路径中的依赖项libeay32.dll
和ssleay32.dll
为eixst,重新下载php_curl.dll,替换旧的,最后复制将文件存入我的System32文件夹。
我正在使用Apache 2.2和PHP 5.4.14。我使用他们的个人包安装了两个;我没有使用XAMP或WAMP。我正在使用Windows 7 64位。
任何帮助都将不胜感激。
答案 0 :(得分:61)
libeay32.dll
和ssleay32.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.dll
和php ext
从Apache24\bin
文件夹移至php
文件夹:
libssh2.dll
此外,请不要忘记在extension=php_curl.dll
php.ini
答案 2 :(得分:14)
解决方案:将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能够加载而没有任何问题。
您可以从以下链接下载:
答案 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版本构建,则可以复制以下文件:
从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文件夹路径添加到系统路径,一切都应该正常工作。它还将修复一些其他破坏的扩展。