/ / PHP e Apache: il comando shell_exec (wkhtmltopdf con xvfb) non funziona - php, apache, wkhtmltopdf, shell-exec, xvfb

PHP e Apache: il comando shell_exec (wkhtmltopdf con xvfb) non funziona - php, apache, wkhtmltopdf, shell-exec, xvfb

Provo a eseguire wkhtmltopdf (0.11.0 rc1) con php (5.4.2) su apache (2.4.2). Quando provo a lanciare wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1, Posso trovare il mio pdf. Ecco il mio codice php

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

Funziona con apache e come riga di comando php test.php. Perché la mia pagina di destinazione contiene molte immagini ealcuni grafici "pesanti" di js. Ho un errore di segmentazione con il comando wkhtmltopdf quando provo a trasformarlo in pdf. L'unico modo per farlo funzionare è usare xvfb come emulatore X11. Il codice è simile al seguente:

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

Questo script funziona con la riga di comando php test.php ma non funziona con Apache. Se do un'occhiata al processo di apache con htop, Posso vedere che ci sono due processi (con php test.php):

  • Xvfb
  • wkhtmltopdf

Quando lancio con apache ho solo il processo xvfb. Termina con un timeout da apache perché è in attesa del processo wkhtmltopdf.

Posso farlo funzionare con apache (2.2.21) e php (5.3.10).

C'è qualcosa che mi manca? Forse qualcosa nei file di configurazione dell'apache?

risposte:

1 per risposta № 1

Avevo lo stesso problema. Stavo usando la funzione exec, ma lo stesso vale per shell_exec. L'esecuzione della funzione è stata disabilitata in php.ini.

SOLUZIONE: Rimuovere la stringa shell_exec dalle disable_functions nel file php.ini.


0 per risposta № 2

Non sono sicuro del perché la tua seconda versione non sia richiamabile da Apache (non deve usare la stessa shell da allora shell_exec usa una shell?), ma come soluzione alternativa (da Apache PHP) shell_exec("php test.php"); e ottieni il tuo risultato previsto?

Forse anche provare una delle altre funzioni di esecuzione del processo come pcntl_exec.


0 per risposta № 3

è principalmente per proprietà e permessi, prova

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

probabilmente vedrai l'errore.