Jonathan Beliën

Jonathan Beliën

Freelance Web Developer

« Spécialiste » en cartographie numérique
Membre du conseil d'administration d'OpenStreetMap Belgique
Membre du conseil d'administration d'Open Knowledge Belgique
Fan de LEGO et de bande-dessinées



PHP: Télécharger une image distante

Publié le 12.01.2011

Dans le cadre de mon boulot, j’ai dû générer un PDF contenant une image générée par un script CGI sur le même serveur.

J’utilise la librairie « FPDF » pour générer mon PDF et sa fonction « Image() » :

$this->Image("http://" . $_SERVER['SERVER_NAME'] . "/ScriptImage?param1=...&param2=...", 10, 20, 400, NULL, 'gif');

Mais j’obtiens l’erreur suivante :

FPDF error: Missing or incorrect image file: http://mondomaine.be/ScriptImage?param1=…&param2=…

J’ai donc pensé ouvrir l’image avec la fonction « imagecreatefromgif() », la sauver sur le disque et enfin, l’insérer dans le PDF.

$img = imagecreatefromgif("http://" . $_SERVER['SERVER_NAME'] . "/ScriptImage?param1=...&param2=...");
imagegif($img, './Temp/map.gif');

Et l’insertion dans mon PDF:

$this->Image('./Temp/map.gif', 10, 20, 400, NULL, 'gif');

Mais sans succès, mon image map.gif n’est pas générée :

PHP Warning: imagecreatefromgif(http://mondomaine.be/ScriptImage?param1=…&param2=…): failed to open stream: Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu.

Après quelques recherches sur Internet, j’ai finalement trouvé quelqu’un qui conseillait d’utiliser « cURL« , géniale petite librairie permettant d’exécuter des requêtes HTTP.

Et voici le script qui fonctionne parfaitement :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://" . $_SERVER['SERVER_NAME'] . "/ScriptImage?param1=...&param2=...");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
$fileContents = curl_exec($ch);
curl_close($ch);
$img = imagecreatefromstring($fileContents);
imagegif($img, './Temp/map.gif');

Mon fichier map.gif est correctement généré sur le disque et l’insertion de l’image dans le PDF se déroule sans soucis.

Merci cURL 🙂