web-dev-qa-db-ja.com

「file_get_contents()」でのcafileストリームのロードに失敗しましたか?

私はグーグルジオコーディングAPIからjsonデータを取得しようとしていました。ただし、phpの警告には、「cafileストリームの読み込みに失敗しました」に関するエラーが表示されます。

これが私のコードです:

$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\1\Desktop\test.php on line 7

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

Warning: file_get_contents(): Failed to enable crypto in 
C:\Users\1\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\1\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\1\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}
2
Jeff Yan

このエラーは、php.iniファイルのcurl.cainfoおよびopenssl.cafile configプロパティが、sslとの接続を作成できる有効な証明書をターゲットにしていない場合に発生します。無効になります。

これは、例としてCURLを使用して外部サーバーにリクエストを呼び出すときに発生します。

リンクからcasert.pemをダウンロードする必要があります ここ

そして、認証ファイルをパスに配置します。

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

その後、次の名前の構成キーでphp.iniを確認します:curl.cainfoおよびopenssl.cafileそして、この構成を作成します

例:

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

Mohammed YassineCHABLIの回答に加えて。 php.iniのファイル名とパスを変更しても、問題は解決しませんでした。

それを機能させるには、「cacert.pem」の名前を「curl-ca-bundle.crt」に変更する必要がありました。

2
Daan

MacOSユーザーの場合brew install openssl私のためにこれを解決しました

2
Seun Oyebode