Apache 和 PHP Curl 问题

Apache 和 PHP Curl 问题

在我的 apache error.log 中,我有以下行:PHP 警告:PHP 启动:无法加载动态库“ext\php_curl.dll”- 找不到指定的过程。\r\n 位于未知的第 0 行

但是我已经检查了我的 PATH 变量并且列出了 PHP 目录,ext 文件夹设置正确并且文件夹中存在 php_curl.dll。

我已经重新安装了 vc++ redistributes 以确保那里没有问题。

在检查过程中,我发现在运行中打开它们时,以下所有 ddl 都存在(为了测试是否可以从 PATH 变量中找到它们):

  • WS2_32.dll
  • 动态链接库
  • php7ts.dll
  • 库文件
  • nghttp2.dll
  • ssleay32.dll
  • 规范化
  • 内核32库
  • 虚拟运行库140
  • api-ms-win-crt-stdio-l1-1-0.dll
  • api-ms-win-crt-字符串-l1-1-0.dll
  • api-ms-win-crt-堆-l1-1-0.dll
  • api-ms-win-crt-转换-l1-1-0.dll
  • api-ms-win-crt-文件系统-l1-1-0.dll
  • API-MS-WIN-CRT-运行时-l1-1-0.dll
  • api-ms-win-crt-实用程序-l1-1-0.dll
  • api-ms-win-crt-时间-l1-1-0.dll
  • API-MS-WIN-CRT-环境-L1-1-0.dll

我不确定 php_curl 可能有哪些依赖项,如果您能提供任何建议,我将不胜感激。

更多系统信息:编译器 MSVC14 (Visual C++ 2015)
架构 x64
Windows 7 平台
PHP 版本 7.1.4
Apache 版本 2.4

答案1

我遇到了同样的问题,但只有在通过 Apache 运行 PHP 时才会出现。在 CLI 中一切正常 - cURL 显示在 中phpinfo()

解决方案是替换 Apachebin目录中的几个文件:

  • 库文件
  • ssleay32.dll
  • nghttp2.dll

当 PHP 通过 Apache 运行时,其bin目录可能优先于系统%PATH%变量,因此 PHP 的 curl 扩展使用来自 Apache 的库,导致版本不匹配(Apache 的库似乎比要求的旧)。

还应该注意,这种行为(据我所知)是从 PHP 7.1 开始的。

答案2

完成上述 dll 复制后,请确保您的 php.ini 中包含以下行,并且 perm 文件也在那里。不要忘记输入您的路径。

[curl] curl.cainfo = “C:\php\extras\ssl\cacert.pem”

[openssl] openssl.cafile = “C:\php\extras\ssl\cacert.pem” openssl.capath="C:\php\extras\ssl\cacert.pem"

相关内容