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 № 1Avevo 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.