1

我尝试在 apache(2.4.2)上使用 php(5.4.2)运行 wkhtmltopdf(0.11.0 rc1)。当我尝试启动wkhtmltopdf-i386 --use-xserver http://www.google.com google.pdf 2>&1时,我可以找到我的 pdf。这是我的php代码

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

它适用于 apache 和命令行php test.php。因为我的目标页面包含许多图像和一些“沉重”的 js 图表。当我尝试将 wkhtmltopdf 命令转换为 pdf 时,我遇到了分段错误。使它工作的唯一方法是使用 xvfb 作为 X11 模拟器。代码如下所示:

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

该脚本适用于命令行php test.php,但不适用于 apache。如果我查看 apache 的进程htop,我可以看到有两个进程(with php test.php):

  • xvfb
  • wkhtmltopdf

当我使用 apache 启动时,我只有 xvfb 进程。它在 apache 超时后完成,因为它正在等待 wkhtmltopdf 进程。

我可以使它与 apache (2.2.21) 和 php (5.3.10) 一起使用。

有什么我想念的吗?也许apache的配置文件中有一些东西?

4

3 回答 3

1

我遇到了同样的问题。我使用的是 exec 函数,但同样适用于 shell_exec。函数执行在 php.ini 中被禁用。

解决方案:从 php.ini 文件的 disable_functions 中删除 shell_exec 字符串。

于 2013-01-07T14:31:14.373 回答
0

我不确定为什么您的第二个版本不能从 Apache 调用(一定不能使用相同的 shell,因为shell_exec使用了 shell?),但作为一种解决方法,您可以(来自 Apache PHP)shell_exec("php test.php");并获得您想要的结果吗?

也许还可以尝试其他流程执行功能之一,例如pcntl_exec

于 2012-09-18T18:34:55.047 回答
0

这主要是因为所有权和权限,请尝试

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

你可能会看到错误。

于 2012-09-18T18:50:35.923 回答