/ / PHP et Apache: shell_exec (wkhtmltopdf avec xvfb) ne fonctionne pas - php, apache, wkhtmltopdf, shell-exec, xvfb

PHP et Apache: shell_exec (wkhtmltopdf avec xvfb) ne fonctionne pas - php, apache, wkhtmltopdf, shell-exec, xvfb

J'essaye de lancer wkhtmltopdf (0.11.0 rc1) avec php (5.4.2) sur apache (2.4.2). Quand j'essaye de lancer wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1, Je peux trouver mon pdf. Voici mon code php

<?php
$cmd= "/usr/bin/wkhtmltopdf-i386 http://www.google.com google.pdf 2>&1";
$ret = shell_exec($cmd);
echo $ret;
?>

Cela fonctionne avec apache et en ligne de commande php test.php. Parce que ma page cible contient de nombreuses images etdes tableaux "lourds" js. J'ai une erreur de segmentation avec la commande wkhtmltopdf lorsque je tente de la convertir en pdf. La seule façon de le faire fonctionner consiste à utiliser xvfb en tant qu'émulateur X11. Le code ressemble à ceci:

<?php
$cmd= "/usr/bin/xvfb-run  /usr/bin/wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1";
$ret = shell_exec($cmd);
echo $ret;
?>

Ce script fonctionne avec la ligne de commande php test.php mais cela ne fonctionne pas avec apache. Si je regarde dans le processus d’apache avec htop, Je peux voir qu’il ya deux processus (avec php test.php):

  • xvfb
  • wkhtmltopdf

Lorsque je lance avec apache, je n'ai que le processus xvfb. Il se termine par un délai d’apache d’apache car il attend le processus wkhtmltopdf.

Je peux le faire fonctionner avec Apache (2.2.21) et PHP (5.3.10).

Y at-il quelque chose qui me manque? Peut-être quelque chose dans les fichiers de configuration d’apache?

Réponses:

1 pour la réponse № 1

J'avais le même problème. J'utilisais la fonction exec, mais la même chose s'applique à shell_exec. L'exécution de la fonction a été désactivée dans php.ini.

SOLUTION: Supprimez la chaîne shell_exec du fichier disable_functions at php.ini.


0 pour la réponse № 2

Je ne sais pas pourquoi votre deuxième version n’est pas appelable à partir d’Apache (ne doit pas utiliser le même shell, car shell_exec utilise un shell?), mais comme solution de contournement, pouvez-vous (depuis Apache PHP) shell_exec("php test.php"); et obtenir votre résultat souhaité?

Peut-être aussi essayer l'une des autres fonctions d'exécution de processus telles que pcntl_exec.


0 pour la réponse № 3

c’est principalement à cause de la propriété et des autorisations, essayez

su www-data (for debian)
php test.php

vous verrez probablement l'erreur.