在 "file_get_contents()" 中加载 cafile 流失败?

Failed loading cafile stream in "file_get_contents()"?

我试图从 google 地理编码 api 中获取 json 数据。但是 php 警告显示了一些关于 "failed loading cafile stream"

的错误

这是我的代码:

$apiKey  = 'apikey';
$address = urlencode( '1600 Amphitheatre Pkwy, Mountain View, CA 94043' 
);
$url     = "https://maps.googleapis.com/maps/api/geocode/json?address= 
    {$address}key={apiKey}";
$resp    = json_decode( file_get_contents( $url ), true );
echo $url;

$lat    = $resp['results'][0]['geometry']['location']['lat'] ?? '';
$long   = $resp['results'][0]['geometry']['location']['lng'] ?? '';

这里是错误:

PHP Warning:  failed loading cafile stream: `C:\xampp\apache\bin\curl-ca- 
bundle.crt' in C:\Users\Desktop\test.php on line 7

Warning: failed loading cafile stream: `C:\xampp\apache\bin\curl-ca- 
bundle.crt' in C:\Users\Desktop\test.php on line 7
PHP Warning:  file_get_contents(): Failed to enable crypto in 
C:\Users\Desktop\test.php on line 7

Warning: file_get_contents(): Failed to enable crypto in 
C:\Users\Desktop\test.php on line 7
PHP Warning:  
file_get_contents(https://maps.googleapis.com/maps/api/geocode/json? 
address=1600+Amphitheatre+Pkwy%2C+Mountain+Vi
ew%2C+CA+94043key={apiKey}): failed to open stream: operation failed in 
C:\Users\Desktop\test.php on line 7

Warning: 
file_get_contents(https://maps.googleapis.com/maps/api/geocode/json? 
address=1600+Amphitheatre+Pkwy%2C+Mountain+View%2C
+CA+94043key={apiKey}): failed to open stream: operation failed in 
C:\Users\Desktop\test.php on line 7
https://maps.googleapis.com/maps/api/geocode/json? 
address=1600+Amphitheatre+Pkwy%2C+Mountain+View%2C+CA+94043key={apiKey}

curl.cainfoopenssl.cafile 配置属性 php.ini文件不要针对任何允许您使用 ssl 创建连接的有效证书,因为它们将无效。

以CURL为例调用外部服务器请求时出现此情况

您必须从 link here

下载 casert.pem

并将认证文件放在路径中:

C:\xampp\apache\bin\cacert.pem

之后,检查名为 curl.cainfoopenssl.cafile[=30= 的配置键上的 php.ini ] 并进行此配置

示例:

curl.cainfo = "C:\xampp\apache\bin\cacert.pem"
openssl.cafile = "‪C:\xampp\apache\bin\cacert.pem"

除了 Mohammed Yassine CHABLI 的回答。更改 php.ini 中的文件名和路径并没有为我解决问题。

我必须将 'cacert.pem' 重命名为 'curl-ca-bundle.crt' 才能正常工作。

对于 MacOS 用户 brew install openssl 为我解决了这个问题

您只需要转到您的 ROUTE C: \ xampp \ perl \ vendor \ lib \ Mozilla \ CA 并复制名为 cacert.pem

的文件

然后输入你的 php.ini 文件并在 [curl] 中粘贴以下路径 C:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem --curl.cainfo="C:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem"

您将在 [openssl] 中执行相同的操作 --openssl.cafile="C:\xampp\perl\vendor\lib\Mozilla\CA\cacert.pem"