PHP无法加载php_curl.dll扩展

use*_*880 33 php curl

昨天从我的帖子跟进(用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位.

任何帮助都将不胜感激.

Jps*_*psy 68

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

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

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

更新2017-05:
我改变了上述指示预先考虑与PHP路径,而不是Path变量追加到它.这样可以确保使用PHP路径中的DLL,而不是系统其他路径中的任何其他(过时的)版本.

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

  • 这最终对我有用 - 不需要自定义dll废话. (7认同)
  • 在我的例子中,要将PHP目录添加到PATH变量.谢谢. (5认同)
  • 只是想在添加PATH变量后添加使用-k restart重新启动apache对我来说还不够.我必须完全阻止它,然后再次启动它. (3认同)
  • 对我来说,我需要删除我复制到apache\bin和system32的libeay32.dll,libssh2.dll,ssleay32.dll和nghttp2.dll.我甚至忘记了当我将nghttp2.dll复制到apache\bin时,我花了一个多星时才搞清楚. (3认同)
  • 这对我有用,但我只想补充一点,我必须重新启动Windows才能使其正常工作.刚刚重启Apache并不够好. (2认同)
  • 经过大量的搜索,最后它在我在envirment变量中添加路径并从apache/bin中删除这些dll文件时起作用. (2认同)

小智 15

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

Windows\system32php文件夹移动到文件夹DLL :

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

Apache24\binphp文件夹移动到文件夹:

libssh2.dll
Run Code Online (Sandbox Code Playgroud)

另外,不要忘了取消注释extension=php_curl.dllphp.ini

  • 只是将`libssh2.dll`文件复制到`Apache24\bin`工作..谢谢!太奇怪了 (15认同)
  • 在Win7 x64上,这对PHP 7(x64)+ Apache 2.4.18(x64)有很大帮助.但是我只是使用`LoadFile'[路径到php]\libpq.dll"`和`LoadFile"[路径到php]\libssh2.dll"`来加载`cURL`和`PgSQL`扩展.*不需要文件移动*.只需在`httpd.conf`中使用`LoadFile`指令加载它们. (7认同)

BIO*_*ARD 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将无法再次加载.

  • 是的,将这些文件从我的PHP目录放到Apache24 / bin中,然后重新启动Apache对我来说是可行的。谢谢! (2认同)

rai*_*ace 6

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

首先php.ini通过运行检查您正在使用的文件phpinfo()

然后通过检查extension_dir该文件中的属性来检查扩展文件夹的位置.

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

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

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

将dll文件复制php_installation_folder/extensionsapache_installation_folder/bin

  • @ user2066880太棒了!当您为Apache和PHP单独安装时会发生什么,我认为PHP是作为CGI模块安装的(这与CLI不同)而不是正确的apache扩展.这意味着php将为(某些)扩展请求apache加载和apache自然检查其bin文件夹并告诉PHP它是否得到它.这就是PHP给出错误定向错误消息的原因.我曾经知道如何解决这个问题,但是自从我使用了分离配置以来已经有好几年了.很高兴它工作了!:-) (2认同)