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

问题描述 投票:0回答:4

我在

PHP 5.5.25
上使用
Apache 2.4
Windows 7 x64
,但无法激活 cURL 模块。我环顾四周并尝试了所有我能想到的。请帮忙:

  • php.ini
    中,行
    extension=php_curl.dll
    处于活动状态并且文件
    php_curl.dll
    存在于扩展目录中
    C:\php\ext
  • php.ini
    中,当我设置
    extension_dir = ext
    时,没有加载任何扩展。当 Apache 启动时,我收到几条消息,类似于
    Unable to load dynamic library
    ext\php_openssl.dll
    - The specified module could not be found.
  • 当我使用完整路径并设置
    extension_dir = C:\php\ext
    时,除了 cURL 之外,所有扩展都可以正常加载。我收到错误:
    Unable to load dynamic library
    C:\php xt\php_curl.dll
    - The specified module could not be found.
  • 我尝试将扩展名重命名为
    php_curl.new.dll
    并调整
    php.ini
    ,但收到有关新文件名的错误消息。我还从
    windows.php.net
    下载了 DLL 的全新副本,但这没有什么区别。
  • 我已经检查了
    php_curl.dll
    的文件权限(右键单击文件>>属性>>安全选项卡),它们与成功加载的扩展的权限相同
  • 我已按照对
    此问题
    的答复的指示,将 
    libeay32.dllssleay32.dll
  • 从 PHP bin 目录复制并粘贴到 System32 和 SysWOW64 目录
  • 我确信我正在编辑正确的
    php.ini
    ,因为当我将
    extension_dir
    值从
    ext
    更改为
    C:\php\ext
    时,PHP 启动错误消息发生了变化,正如我上面所解释的。
  • 我已确保在
    php.ini
    配置更改之间重新启动 Apache 服务器。
  • 如果在 PHP 脚本中执行
    var_dump(file_exists('C:\php\ext\php_curl.dll'));
    ,我会得到
    boolean True
    ,这样 PHP 就可以看到该文件!

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

php curl php-extension
4个回答
11
投票

我认为您的

libssh2.dll
中也需要
PATH


4
投票

感谢@Steven Hilder 为我指明了正确的方向。

问题是 Windows 无法看到

libssh2.dll
,这是 PHP 目录中的另一个 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 路径:

  1. Start Menu
    搜索栏中搜索并选择
    Advanced system settings
  2. 单击
    Environment Variables
    。 向下滚动系统变量列表以选择
    Path
    ,然后单击
    Edit...
    打开当前的 PATH 设置
  3. ;C:\php
    或任何具有
    php.exe
    的目录附加到当前设置(分号用于分隔路径)。

2
投票

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

将以下代码放在curl_exec(curlHandle)之前以忽略对SSL证书的检查

//to ignore the SSL certificate in windows
        curl_setopt($curlHandle, CURLOPT_SSL_VERIFYPEER,false);

0
投票

每次我遇到 php 模块问题时,都与库缺少或重叠有关。

假设最好的选择是将 php 文件夹添加到 PATH 环境变量。

然而有时这还不够。 如果 php 独立版(没有 apache)加载模块,可能 php 文件夹中的 dll 没问题,但 apache 不会加载它们,因为具有相同库的其他文件夹具有优先权(例如 system32 或其他程序)。

在这种情况下,只需将主 php 文件夹中的所有 dll 复制到 apache/bin 文件夹中即可。

© www.soinside.com 2019 - 2024. All rights reserved.