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=...¶m2=...", 10, 20, 400, NULL, 'gif');
Mais j’obtiens l’erreur suivante :
FPDF error: Missing or incorrect image file: http://mondomaine.be/ScriptImage?param1=…¶m2=…
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=...¶m2=...");
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=…¶m2=…): 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=...¶m2=...");
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 🙂