PHP忽略php.ini中的curl.cainfo设置(显然)

vsmadaxz  于 2023-05-27  发布在  PHP
关注(0)|答案(3)|浏览(276)

我正在尝试修复一个在Windows服务器(运行IIS)上的php_curl调用,该调用返回熟悉的错误“SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败”。
正如在这里的许多相关问题中所详述的,我下载了http://curl.haxx.se/ca/cacert.pem,将其移动到服务器的硬盘驱动器上,并将curl.cainfo设置添加到我的php.ini中:

curl.cainfo = "C:\path\to\cacert.pem"

没什么,还是同样的错误。但是,在PHP代码中指定路径会导致成功响应!

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CAINFO, "C:\path\to\cacert.pem");
$response = curl_exec($ch);

这确实给予了我一个暂时可以使用的解决方法,但是我正在维护一个在许多地方都有php_curl调用的大型应用程序,因此在php.ini中指定一次此设置会更合乎逻辑,因此它适用于应用程序中的所有php_curl调用。
潜在的愚蠢错误检查:
1.我正在php.ini编辑之间重新启动IIS
1.我知道我正在编辑正确的php.ini,因为“echo ini_get('smtp_port');“反映了我对该设置所做的更改(仅为测试而更改非关键设置)
1.我知道IIS可以读取该文件,因为它在使用curl_setopt()(如上所述)进行设置时工作
直接查看ini设置会发现PHP似乎对此一无所知(我这样做对吗?):

var_dump(ini_get('curl.cainfo'));

==> bool(false)

知道为什么PHP不能读取curl.cainfo设置吗?

yhuiod9q

yhuiod9q1#

一位同事告诉我,这个curl php.ini设置直到PHP 5.3.7才添加:http://www.php.net/manual/en/curl.configuration.php#ini.curl.cainfo
我使用的特定测试服务器运行的是一个较旧的版本,所以PHP没有从php.ini阅读该设置。

ljsrvy3e

ljsrvy3e2#

您可能没有更新正确的php.ini文件。要查看哪个文件正在用作cmd窗口中的php.ini文件,请键入以下内容

php -i

查找Loaded配置文件值并打开该文件,然后设置cacert.pem文件的curl_cainfo和openssl_cafile绝对路径。

wbrvyc0a

wbrvyc0a3#

在我的情况下没有任何帮助,直到我意识到我没有安装php-curl扩展。在那之后,它起作用了

相关问题