2017-09-29 5 views
0

J'essaie de générer des images en utilisant des scripts PHP et de les placer dans un fichier PDF généré par la bibliothèque mPDF.Images mPDF générées par des scripts PHP

J'ai cloné le référentiel mpdf-examples qui contient plusieurs exemples, dont un avec des images, le lien est https://github.com/mpdf/mpdf-examples afin que vous puissiez voir le code source. En example04_images.php, les images renvoyées par tiger.php ne fonctionnent pas.

Lors de l'exécution à partir de la ligne de commande php example04_images.php > out.pdf, le fichier contiendra le type d'images [X], ce qui signifie qu'elles n'ont pas pu être chargées. Lors du chargement du script à partir du navigateur, il sera bloqué pour toujours.

Mon fichier compositeur est

{ 
    "name": "mpdf/examples", 
    "description": "Example repository for Mpdf HTML to PDF generator", 
    "require": { 
    "ext-gd": "*", 
     "mpdf/mpdf": "7.0.0-beta2" 
    } 
} 

Lorsque je supprime le bit de code qui utilise des images générées .php, le PDF est généré correctement. Il échoue seulement quand j'inclue ces images générées php.

Mon php -v est:

PHP 7.0.24-1+ubuntu14.04.1+deb.sury.org+1 (cli) (built: Sep 28 2017 16:33:02) (NTS)

Il semble que l'utilisation des images générées PHP fonctionne pour beaucoup de gens, et même la documentation dit qu'il est possible. Mais ça ne marche pas pour moi.

+0

Quel serveur utilisez-vous pour afficher l'exemple dans le navigateur? – Finwe

+0

J'utilise PHP Cli. Devrais-je passer à autre chose? Si oui, pourquoi php cli échoue-t-il? Cela échoue également sur Heroku –

+0

Vous voulez dire que vous exécutez le serveur PHP embarqué 'php -S'? Quel est l'environnement sur Heroku? – Finwe

Répondre

0

mPDF extrait en interne les images avec un appel file_get_contents. Lorsque vous utilisez un serveur à un seul thread tel que php -S, la demande suivante bloque l'application. This SO QA résume parfaitement ce comportement. C'est pourquoi la requête du navigateur se bloque indéfiniment.

mPDF peut accomplir certaines de ses capacités sur des serveurs à un seul thread, mais pas tous. Un serveur approprié (Apache, nginx avec PHP-FPM) est fortement recommandé.

Il est logique que les images ne soient pas chargées correctement lors de l'exécution du script à partir de la ligne de commande. Les chemins d'accès aux images sont des URL relatives qui doivent être traitées par PHP pour renvoyer le contenu correct. Il n'y a pas de moyen simple d'y parvenir sans une requête HTTP ultérieure - ce qui dépasse la portée d'un simple appel php cli. Pour que l'exemple fonctionne dans l'interface de ligne de commande, vous devez créer un lien vers des fichiers image réels (qui, je crois, fonctionnent correctement dans l'exemple d'image) ou fournir une URL complète au script tiger.php où le script serait traité avec un serveur.