为什么PHP拒绝在Windows上启用cURL

为什么PHP拒绝在Windows上启用cURL,php,curl,php-extension,Php,Curl,Php Extension,我正在windows7x64上使用php5.5.25和apache2.4,无法激活cURL模块。我环顾四周,用尽了我所能想到的一切。请协助: 在php.ini中,行extension=php_curl.dll处于活动状态,文件php_curl.dll位于扩展目录C:\php\ext 在php.ini中,当我设置extension\u dir=ext时,没有加载任何扩展。Apache启动时,我收到几条消息,类似于无法加载动态库ext\php\u openssl.dll-找不到指定的模块。 当我使

我正在
windows7x64
上使用
php5.5.25
apache2.4
,无法激活cURL模块。我环顾四周,用尽了我所能想到的一切。请协助:

  • php.ini
    中,行
    extension=php_curl.dll
    处于活动状态,文件
    php_curl.dll
    位于扩展目录
    C:\php\ext
  • php.ini
    中,当我设置
    extension\u dir=ext
    时,没有加载任何扩展。Apache启动时,我收到几条消息,类似于
    无法加载动态库
    ext\php\u openssl.dll
    -找不到指定的模块。
  • 当我使用完整路径并设置
    extension\u dir=C:\php\ext
    时,除了cURL之外,所有扩展都可以正常加载。我收到错误:
    无法加载动态库
    C:\php\ext\php\u curl.dll
    -找不到指定的模块。
  • 我已尝试将扩展名重命名为
    php\u curl.new.dll
    并调整
    php.ini
    ,但收到一条关于新文件名的错误消息。我还从
    windows.php.net
    下载了一个新的DLL副本,但这并没有什么不同
  • 我已经检查了
    php_curl.dll
    (右键单击文件>>属性>>安全选项卡)的文件权限,它们与成功加载的扩展的权限相同
  • 我已按照响应的指示,将
    libeay32.dll
    ssleay32.dll
    从PHP bin目录复制并粘贴到System32和SysWOW64目录
  • 我确信我正在编辑正确的
    php.ini
    ,因为当我将
    extension\u dir
    值从
    ext
    更改为
    C:\php\ext
    时,php启动错误消息发生了更改,如上所述
  • 我已确保在
    php.ini
    配置更改之间重新启动Apache服务器
  • 如果在PHP脚本中执行
    var_dump(文件_存在('C:\PHP\ext\PHP_curl.dll')
    ,我得到了
    布尔值True
    ,这样PHP就可以看到这个文件了

还有什么可以解释为什么没有启用cURL模块?

我认为在
路径中也需要
libssh2.dll

在windows上,cURL执行需要SSL证书。可能是因为显示了其他错误

将下面的代码放在curl_exec(curlHandle)之前


史蒂文·希尔德为我指明了正确的方向,这值得赞扬

问题是Windows无法看到PHP目录中的另一个dll
libssh2.dll
。将此文件复制到
C:\Windows\SysWOW64
C:\Windows\System32
,以及我的OP中的其他两个DLL文件(
libeay32.DLL
ssleay32.DLL
)起作用

不过,我对这个解决方案感到不舒服,因为当更新到新的PHP版本时,我很难记住用新版本覆盖这些DLL。 因此,我决定从
System32
SysWOW64
目录中删除所有3个DLL。相反,我只是将PHP bin目录添加到Windows的PATH变量中,以便下次操作系统查找丢失的文件时,它也会在该目录中查找。如果另一个DLL出现类似问题,它将自动解决,这是一个额外的好处

要将PHP bin添加到Windows的路径,请执行以下操作:

  • 开始菜单
    搜索栏中,搜索并选择
    高级系统设置
  • 单击环境变量
  • 。向下滚动系统变量列表以选择
    Path
    ,然后单击
    Edit…
    打开当前路径设置
  • 追加
    ;C:\php
    或当前设置中包含的任何目录
    php.exe
    (分号用于分隔路径)

  • 成功了!将随机DLL从
    C:\php
    复制到
    C:\Windows\SysWOW64
    以后可能会导致问题,因为当我更改php版本时,我不记得用新版本的DLL覆盖这些副本。我正在考虑将
    C:\php
    添加到Windows路径变量。这样,所有的PHP DLL文件都可以放在一起,并且更易于维护。你认为这有什么大的缺点吗?不,这是明智的做法。虽然你的意思是
    C:\php\ext
    ,对吗?我已经很久没有在Windows上运行PHP了…扩展名在
    C:\PHP\ext
    中,但Windows看不到的DLL在
    C:\PHP
    中,将此文件与PHP.exe放在同一位置,PHP.ini(一起)解决了这个问题。错过了那个小文件。谢谢!!节省了我的时间:)cURL模块根本无法加载,因此我的脚本没有可用的cURL函数。我的问题是操作系统需要,但找不到
    libssh2.dll
    //to ignore the SSL certificate in windows
            curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER,false);