【问题标题】:Why does PHP refuse to enable cURL on Windows为什么 PHP 拒绝在 Windows 上启用 cURL
【发布时间】:2025-12-14 19:05:01
【问题描述】:

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

  • php.ini 中,extension=php_curl.dll 行处于活动状态,并且文件php_curl.dll 存在于扩展目录C:\php\ext
  • php.ini 中,当我设置extension_dir = ext 时,没有加载任何扩展。 Apache 启动时收到几条消息,类似于Unable to load dynamic libraryext\php_openssl.dll- The specified module could not be found.
  • 当我使用完整路径并设置extension_dir = C:\php\ext 时,所有扩展都可以正常加载,cURL 除外。我得到错误:Unable to load dynamic libraryC:\php\ext\php_curl.dll- The specified module could not be found.
  • 我尝试将扩展名重命名为php_curl.new.dll 并调整php.ini,但我收到有关新文件名的错误消息。我还从windows.php.net 下载了一个全新的 DLL 副本,但这并没有什么不同。
  • 我已经检查了php_curl.dll的文件权限(右键单击文件>>属性>>安全选项卡),它们与成功加载的扩展的权限相同
  • 按照this question 的回复,我已将 PHP bin 目录中的 libeay32.dllssleay32.dll 复制并粘贴到 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


    【解决方案1】:

    我认为您的PATH 中也需要libssh2.dll

    【讨论】:

    • 成功了!将随机 DLL 从 C:\php 复制到 C:\Windows\SysWOW64 可能会在以后引起问题,因为当我更改 PHP 版本时,我不会记得用新版本的 DLL 覆盖这些副本。我正在考虑而不是将C:\php 添加到Windows PATH 变量中。这样,所有 PHP DLL 文件可以保持在一起并且更易于维护。你觉得这有什么大的缺点吗?
    • 不,这是明智之举。虽然你的意思是C:\php\ext,对吧?很久没有在 Windows 上运行 PHP 了...
    • 扩展在C:\php\ext,但是Windows看不到的DLL在C:\php
    • 将此文件放在与 php.exe 相同的位置,和 php.ini(一起)解决了这个问题。错过了那个小文件。
    • 谢谢!!节省了我的时间:)
    【解决方案2】:

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

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

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

    【讨论】:

    • cURL 模块根本不会加载,因此我的脚本没有可用的 cURL 函数。我的问题是操作系统需要但找不到libssh2.dll
    【解决方案3】:

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

    问题是 Windows 看不到 libssh2.dll,这是 PHP 目录中的另一个 DLL。将此文件复制到 C:\Windows\SysWOW64C:\Windows\System32,以及我的 OP 中的其他两个 DLL 文件(libeay32.dllssleay32.dll)工作。

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

    将 PHP bin 添加到 Windows 的 PATH:

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

    【讨论】: