我尝试在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图表。当我尝试将其转换为pdf时,我的wkhtmltopdf命令出现了Segmentation Fault。
使其工作的唯一方法是使用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。如果我使用htop
查看apache的进程,我可以看到有两个进程(使用php test.php
):
当我使用apache启动时,我只有xvfb进程。它完成了apache的超时,因为它正在等待wkhtmltopdf进程。
我可以使用apache(2.2.21)和php(5.3.10)。
有什么东西我不见了吗?也许在apache的config-files中有什么东西?
答案 0 :(得分:1)
我遇到了同样的问题。我使用的是exec函数,但同样适用于shell_exec。在php.ini中禁用了函数执行。
SOLUTION:从php.ini文件中的disable_functions中删除shell_exec字符串。
答案 1 :(得分:0)
我不确定为什么你的第二个版本不能从Apache调用(不能使用相同的shell,因为shell_exec
使用shell?),但作为一个解决方法你可以(来自Apache PHP) shell_exec("php test.php");
并获得您的预期结果?
也许还尝试其他流程执行功能之一,例如pcntl_exec。
答案 2 :(得分:0)
主要是因为所有权和权限,请尝试
su www-data (for debian)
php test.php
你可能会看到错误。