【问题标题】:WkHTMLtoPDF 0.12.2.1 PHP exec xvfb-run: Error: xauth command not foundWkHTMLtoPDF 0.12.2.1 PHP exec xvfb-run:错误:未找到 xauth 命令
【发布时间】:2015-05-30 05:04:10
【问题描述】:

我想从一个 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"
}

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

  • 操作系统:CentOS 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);
?>

【问题讨论】:

  • 检查是否禁用了安全模式?
  • 你的意思是safe_mode = Off?我在 php.ini 中检查了 safe_mode 是否关闭
  • 你试图只运行/usr/local/bin/wkhtmltopdf http://www.google.com /tmp/google.pdf
  • @joaoBeno 是的,我尝试在 PHP 中运行没有 xvfb-run 的命令,但失败了!但在命令行上成功。
  • @joaoBeno 我认为这是权限问题?如何授予nobody用户运行wkhtmltopdf的权限?

标签: php centos wkhtmltopdf xauth


【解决方案1】:

对于 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 帮我解决了这个问题~~

【讨论】:

  • 谢谢。就我而言,我将它与 xvfb 一起在 cron 上运行,在检查错误时显示“未找到 wkhtmltoimage 命令”,我只是将命令从“wkhtmltoimage”修改为“/usr/local/bin/wkhtmltoimage”跨度>
【解决方案2】:

如果您使用的是 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多