WkHTMLtoPDF 0.12.2.1 PHP exec xvfb-run:错误:xauth命令未找到


WkHTMLtoPDF 0.12.2.1 PHP exec xvfb-run: Error: xauth command not found

我想从URL生成PDF,所以我执行WkHTMLtoPDF命令,如下所示:

/usr/bin/xvfb-run --server-args="-screen 0, 1920x1080x24" /usr/local/bin/wkhtmltopdf http://www.google.com /tmp/google.pdf  2>&1

上面的命令在终端上工作得很好,但是当我在PHP中调用命令失败了!并显示如下错误信息:

array(2) { 
    [0]=> string(27) "which: no xauth in ((null))"
    [1]=> string(40) "xvfb-run: error: xauth command not found"
}

我不知道如何解决这个问题!任何人都可以帮助我,我的操作系统环境如下:

  • OS: CentOS release 6.6
  • wkhtmltopdf版本:0.12.2.1
  • nginx版本:nginx/1.6.3
我的PHP代码如下:
<php
    $var = array();
    $res = 0;
    $cmd = '/usr/bin/xvfb-run --server-args="-screen 0, 1920x1080x24" /usr/local/bin/wkhtmltopdf http://www.google.com /tmp/google.pdf  2>&1';
    exec($cmd, $var, $res);
    echo $cmd.'&lt;br /&gt;';
    var_dump ($var);
?>

对于CentOS PHP环境,WkHTMLtoPDF工具不需要xvfb-run来执行命令,但是对于Ubuntu PHP环境,需要xvfb-run来执行命令!我修改了我的代码如下,问题得到了解决:

$osName = 'lsb_release -d 2>&1';
exec('lsb_release -d', $osName);
$isCentOS   = strrpos(strtolower($osName[0]), 'centos'); 
$cmd = '/usr/local/bin/wkhtmltopdf http://www.google.com /tmp/google.pdf  2>&1';
if ($isCentOS === false) {
     $cmd = '/usr/bin/xvfb-run --server-args="-screen 0, 1920x1080x24" /usr/local/bin/wkhtmltopdf http://www.google.com /tmp/google.pdf  2>&1';
} 

问题目前已解决,感谢@joaoBeno保存我修复了这个问题~~

如果使用的是PHP-FPM,默认情况下环境变量不会被继承到工作进程中。这就是为什么在环境变量PATH中找不到xauth的原因。要解决这个问题,您可以设置php-fpm的配置文件,例如/etc/php-fpm.d/www.conf,通常在[www]部分:

  1. 取消注释行:

    ;clear_env = no

  2. 或添加新行:

    env[PATH] = '/usr/local/bin:/usr/bin:/bin'