Comment résoudre l'erreur PHP Failed to enable crypto ?

Réponses rédigées par Antoine
Dernière mise à jour : 2022-01-10 00:26:58
Thèmes : php - ssl
Question

Bonjour, j'essaie de récupérer un flux RSS avec la fonction PHP simplexml_load_file, mais j'obtiens toujours les erreurs SSL operation failed et Failed to enable crypto. Savez vous comment solutionner ce problème ?

<?php
$rss = simplexml_load_file('https://www.exemple.com/feed/');

$article = 0;
foreach($rss->channel->item as $val) {
    echo "<a href='" . $val->link . "'>" . $val->title . "</a><br>";
    echo date("d m Y", strtotime($val->pubDate)) . "<br>";
    $article++;
    if ($article==7) {
        break;
    }
}
?>
Réponse

Le problème vient du fait que le l'extension OpenSSL et son certificat se sont pas déclarés dans le fichier PHP.ini de votre serveur.

L'alternative consiste à créer un contexte de flux SSL pour la fonction simplexml_load_file ; il en va d'ailleurs de même avec toutes autres fonctions, tel que file_get_contents par exemple.

Il vous suffit d'utiliser les options de contexte verify_peer et verify_peer_name.

<?php
$context = stream_context_create(array("ssl"=>array(
    "verify_peer" => false, 
    "verify_peer_name"=>false
    )));

libxml_set_streams_context($context);

$rss = simplexml_load_file("https://www.exemple.com/feed/");

$article = 0;
foreach($rss->channel->item as $val){
    echo "<a href='" . $val->link . "'>" . $val->title . "</a><br>";
    echo date("d m Y", strtotime($val->pubDate)) . "<br>";
    $article++;
    if ($article==7) {
        break;
    }
}
?>