/ / PHP y Apache: shell_exec (wkhtmltopdf con xvfb) el comando no funciona - php, apache, wkhtmltopdf, shell-exec, xvfb

PHP y Apache: shell_exec (wkhtmltopdf con xvfb) el comando no funciona - php, apache, wkhtmltopdf, shell-exec, xvfb

Intento ejecutar el wkhtmltopdf (0.11.0 rc1) con php (5.4.2) en apache (2.4.2). Cuando intento lanzar wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1, Puedo encontrar mi pdf. Aquí mi código php

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

Funciona con apache y como línea de comando. php test.php. Porque mi página de destino contiene muchas imágenes yalgunos "pesados" gráficos de js. Tengo un error de segmentación con el comando wkhtmltopdf cuando intento convertirlo en pdf. La única forma de hacerlo funcionar es usar xvfb como emulador X11. El código se ve así:

<?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;
?>

Este script funciona con la línea de comando. php test.php pero no funciona con apache. Si observo el proceso de apache con htop, Puedo ver que hay dos procesos (con php test.php)

  • xvfb
  • wkhtmltopdf

Cuando lanzo con apache solo tengo el proceso xvfb. Termina con un tiempo de espera de Apache porque está esperando el proceso wkhtmltopdf.

Puedo hacer que funcione con apache (2.2.21) y php (5.3.10).

¿Hay algo que me esté faltando? ¿Tal vez algo en los archivos de configuración de apache?

Respuestas

1 para la respuesta № 1

Estaba teniendo el mismo problema. Estaba usando la función exec, pero lo mismo se aplica a shell_exec. La ejecución de la función fue deshabilitada en php.ini.

SOLUCIÓN: Elimine la cadena shell_exec de las deshabilitar_funciones en el archivo php.ini.


0 para la respuesta № 2

No estoy seguro de por qué su segunda versión no se puede llamar desde Apache (no debe usar el mismo shell, ya que shell_exec usa un shell?), pero como una solución alternativa podría (desde Apache PHP) shell_exec("php test.php"); y obtener su resultado previsto?

Quizás también intente una de las otras funciones de ejecución de procesos como pcntl_exec.


0 para la respuesta № 3

es principalmente debido a la propiedad y permisos, intente

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

Usted probablemente verá el error.