Comment utiliser cURL pour lire un fichier externeSi comme moi vous êtes héberger sur un serveur partagé (hosted solution), il peut arriver que certaines configurations de PHP vous cause problème. C'est ce qui m'est arrivé. Pour des raisons de sécurité, mon hébergeur a desactiver les deux directives suivantes :
Comme c'est deux directives sont PHP_INI_SYSTEM, je ne pouvais ni utiliser ini_set() ni utiliser un fichier .htaccess pour les modifier. Pourtant, j'avais besoin de ces fonctionnalités pour ajouter un feed RSS dans une page. Comment faire pour ouvrir un fichier .xml d'un autre site dans ce cas là? cURL à la rescousseSi votre hébergeur met à votre disposition le module cURL1, vous pouvez y arriver facilement.
function GetRemoteFileContent($url)
{
$ch = curl_init(); // Initialiser cURL.
curl_setopt($ch, CURLOPT_URL, $url); // Indiquer quel URL récupérer
curl_setopt($ch, CURLOPT_HEADER, 0); // Ne pas inclure l'header dans la réponse.
ob_start(); // Commencer à 'cache' l'output.
curl_exec($ch); // Exécuter la requète.
curl_close($ch); // Fermer cURL.
$cache = ob_get_contents(); // Sauvegarder la 'cache' dans la variable $cache.
ob_end_clean(); // Vider le buffer.
return $cache;
}
Au lieu d'utiliser ob_start(), j'aurais pus aussi utiliser curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);, mais ça me permet de montrer ob_start() à l'oeuvre :-) 1 Pour savoir si votre fournisseur vous permet d'utiliser le module cURL, inspecter votre phpinfo()
Sébastien Brodeur Il est strictement interdit de reproduire ce texte sans la permission écrite de l'auteur. Commentaire(s)Sébastien Brodeur - 2007-06-11 18:54:23
Je viens de me rendre compte que cela fonctionne à cause d'un bug de sécurité dans PHP.
Ce bug devrait être corrigé dans les dernières versions de PHP. Tiger - 2007-08-09 07:57:35
Qu'est-ce qui fonctionne à cause d'un bug ?
John Doe - 2007-08-25 06:01:08
j'ai rien compris
Sébastien Brodeur - 2007-08-25 07:35:08
Il est possible d'utiliser fopen() avec un url. Je voulais faire ça pour lire un feed RSS d'un autre site et d'afficher celui-ci. Hors, parce que les directives allow_url_fopen et alow_url_include était mise à off, je ne pouvais pas le faire.
J'ai découvert qu'avec cURL j'étais capable d'y arrivé. Pourquoi je dis que c'est un bug? C'est parce-que cURL devrait lui aussi respecter les directive allow_url_fopen et ne pas permettre d'ouvrir un url. Ce bug a été corrigé dans une version plus récente de PHP. Ajouter un commentaire |
Les gens qui ont consulter cet article, ont aussi consultez ceux-ci : |
|