2
votes

Échec du chargement du flux cafile dans "file_get_contents ()"?

J'essayais d'obtenir des données JSON à partir de l'API de géocodage de Google. Cependant, l'avertissement php montre une erreur concernant "l'échec du chargement du flux cafile"

Voici mon code:

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}

Voici l'erreur:

$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'] ?? '';


0 commentaires

4 Réponses :


10
votes

Cette erreur se produit lorsque les propriétés de configuration curl.cainfo et openssl.cafile de votre fichier php.ini ne ciblent aucun certificat valide vous permettant de créer une connexion avec ssl car ils ne seront pas valides.

Cela se produit lors de l'appel d'une requête à des serveurs externes en utilisant CURL comme exemple.

Vous devez télécharger le casert.pem à partir du lien ici

Et placez le fichier de certification dans le chemin: p>

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

Après, vérifiez le php.ini sur la clé de configuration nommée: curl.cainfo et openssl.cafile et faites cette configuration

exemple:

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


2 commentaires

Je pense que vous voulez dire openssl.cafile dans la deuxième ligne.


J'étais confronté au même problème avec SoapClient. la solution ci-dessus fonctionne bien avec xampp (windows)



2
votes

En plus de la réponse de Mohammed Yassine CHABLI. Changer le nom de fichier et le chemin dans le php.ini n'a pas résolu le problème pour moi.

J'ai dû renommer le 'cacert.pem' en 'curl-ca-bundle.crt' pour que cela fonctionne.


1 commentaires

peut-être que le redémarrage d'Apache sur le panneau de configuration xampp fera l'affaire après les changements de php.ini



2
votes

Pour les utilisateurs de MacOS, brew install openssl a résolu ce problème pour moi


0 commentaires

0
votes

Il vous suffit d'aller sur votre ROUTE C: \ xampp \ perl \ vendor \ lib \ Mozilla \ CA et copiez le fichier appelé cacert.pem

Entrez ensuite votre fichier php.ini et dans [curl] collez le chemin suivant C: \ xampp \ perl \ vendor \ lib \ Mozilla \ CA \ cacert.pem --curl.cainfo = "C: \ xampp \ perl \ vendor \ lib \ Mozilla \ CA \ cacert.pem"

vous ferez de même dans [openssl] --openssl.cafile = "C: \ xampp \ perl \ vendor \ lib \ Mozilla \ CA \ cacert.pem"


1 commentaires

Utilisez toujours le formatage du code. Cela donnera une meilleure lisibilité.