Ошибка wkhtmltopdf в журнале apache

exec("wkhtmltopdf test.html output.pdf"); 

В командной строке php она работает, но если я попытаюсь вызвать ее из apache, она не создаст файл pdf, и журнал покажет это:

 $ tail -f /var/log/apache2/error.log wkhtmltopdf: cannot connect to X server 

Related of "Ошибка wkhtmltopdf в журнале apache"

Вы можете использовать Xvfb для эмуляции x-среды

 <?php exec("xvfb-run -a wkhtmltopdf test.html output.pdf"); 

ИЛИ

 <?php exec("startx -- `which Xvfb` :1 -screen 0 800x600x24 && DISPLAY=:1 && wkhtmltopdf test.html output.pdf"); 

Я сделал этот сценарий для себя, чтобы wkhtml работал на centos 6+:

  yum install xorg-x11-server-Xvfb nano /etc/init.d/xvfbd #paste this: #!/bin/bash # # /etc/rc.d/init.d/xvfbd # # chkconfig: 345 95 28 # description: Starts/Stops X Virtual Framebuffer server # processname: Xvfb # . /etc/init.d/functions [ "${NETWORKING}" = "no" ] && exit 0 PROG="/usr/bin/Xvfb" PROG_OPTIONS=":1 -screen 1 1024x768x24 -nolisten tcp" PROG_OUTPUT="/tmp/Xvfb.out" case "$1" in start) echo -n "Starting : X Virtual Frame Buffer " $PROG $PROG_OPTIONS>>$PROG_OUTPUT 2>&1 & disown -ar /bin/usleep 500000 status Xvfb & >/dev/null && echo_success || echo_failure RETVAL=$? if [ $RETVAL -eq 0 ]; then /bin/touch /var/lock/subsys/Xvfb /sbin/pidof -o %PPID -x Xvfb > /var/run/Xvfb.pid fi echo ;; stop) echo -n "Shutting down : X Virtual Frame Buffer" killproc $PROG RETVAL=$? [ $RETVAL -eq 0 ] && /bin/rm -f /var/lock/subsys/Xvfb /var/run/Xvfb.pid echo ;; restart|reload) $0 stop $0 start RETVAL=$? ;; status) status Xvfb RETVAL=$? ;; *) echo $"Usage: $0 (start|stop|restart|reload|status)" exit 1 esac exit $RETVAL #END chmod 550 /etc/init.d/xvfbd chkconfig xvfdb on service xvfdb start #Compile wkhtml compelety: http://code.google.com/p/wkhtmltopdf/wiki/compilation ./configure -nomake examples,demos,docs,translations -opensource -webkit -prefix "../wkqt" #Install fonts: yum install xorg-x11-fonts* 

После этого запустите его в PHP:

 exec("DISPLAY=:1 timeout 60 wkhtmltoimage --height 1024 --width 1280 --quality 80 \"" . $site . "\" " . $filename); 

На веб-сайте есть более новая версия wkhtmltopdf (0.11), которая не требует запуска X-сервера.

Для всего остального есть сценарии оболочки.

  #!/bin/bash if [[ $EUID -ne 0 ]]; then echo "This script must be run as root" 1>&2 exit 1 fi apt-get install xvfb wkhtmltopdf mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdfbin echo 'xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdfbin $*' > /usr/bin/wkhtmltopdf.sh ln -s /usr/bin/wkhtmltopdf.sh /usr/bin/wkhtmltopdf