从PHP执行wkhtmltopdf

从PHP执行wkhtmltopdf,php,wkhtmltopdf,html2pdf,Php,Wkhtmltopdf,Html2pdf,我在Linux命令行中可以很好地工作: wkhtmltopdf entry.html output.pdf 但以下内容在PHP代码中不起作用: exec('wkhtmltopdfentry.html output.pdf') 有趣的是,我在谷歌上搜索了很多未经检查的解决方案,但没有解释为什么这是一个问题。 如果您有好的,谢谢。也许wkhtmltopdf不在www数据的路径变量中 whereis wkhtmltopdf 将告诉您二进制文件的位置;二进制文件通常驻留在*nix机器上的/usr/bi

我在Linux命令行中可以很好地工作:

wkhtmltopdf entry.html output.pdf

但以下内容在PHP代码中不起作用:

exec('wkhtmltopdfentry.html output.pdf')

有趣的是,我在谷歌上搜索了很多未经检查的解决方案,但没有解释为什么这是一个问题。
如果您有好的,谢谢。

也许
wkhtmltopdf
不在www数据的路径变量中

whereis wkhtmltopdf
将告诉您二进制文件的位置;二进制文件通常驻留在*nix机器上的
/usr/bin/…
中。然后将命令中的
wkhtmltopdf
替换为例如
/usr/bin/wkhtmltopdf
,如下所示

/usr/bin/wkhtmltopdf entry.html output.pdf

wkhtmltopdf有,其中一个是PHP。你可以试一试。

就我而言,有一个简单的解决方案:我没有意识到PHP处于安全模式。关闭了安全模式,工作正常

也有同样的问题,我认为其他人不应该浪费超过3个小时:

解决方案如下:

您只需安装xvfp“模拟x环境”


这里是一个围绕wkhtmltopdf的PHP包装
非常简单

我也在努力解决同样的问题

我在
Windows2008R2
服务器上使用
PHP5.4
的解决方案:

exec('C:\inetpub\wwwroot\mywebsite\subdir\wkhtmltopdf input.html output.pdf');
这是一个名为output.txt的新文件,它被重命名为output.pdf,并授予用户“所有人”权限

以下是我的选拔赛:

  exec(C:\inetpub\wwwroot\mywebsite\wkhtmltopdf );
  echo(exec(wkhtmltopdf.exe cache.html output.pdf));
  exec("xvfb-run -a wkhtmltopdf test.html output.pdf")
  $execute = "xvfb-run -a wkhtmltopdf cache.html output.pdf";
  $out = shell_exec("/path/to/wkhtmlto­pdf --version"); echo($out); 
  $out = passthru('/usr/local/bin/wkhtml2pdf

希望这些对其他人有用

如果PHP调用的子shell最终具有与标准默认shell不同的路径设置,您可能需要指定可执行文件的绝对路径,例如
exec(/usr/bin/wkhtmltopdf…
)。同样,如果您在基于web的脚本中执行exec,那么权限也将是一个因素。您是否收到任何PHP错误消息?当您直接在shell中键入时会发生什么?检查apache错误日志,您可能会在那里找到答案(像我一样)
type-P'wkhtmltopf'
whereis
更可靠。我也尝试过:$input=getcwd()。“/entry.html”;$output=getcwd()。“/output.pdf”;exec('/usr/bin/wkhtmltopdf$entry$output');但结果相同。@user238831,然后尝试
getcwd()
()验证脚本是否在正确的目录中执行。-看看
getcwd()
返回的内容。@Alix Axel--请详细说明,或提供来源。@user238831--当然执行
exec
语句,如果您没有注释掉它的话。使用
$output=passthru('/usr/local/bin/wkhtml2pdf/tmp/foo.html/bar/foo.pdf');echo$输出
以便您可以查看
wkhtml2pdf
的命令行执行是否抱怨任何问题。有趣的是,只需浏览一下即可。然而,这个命令对我来说是最方便的,因为我想在运行中进行转换。那么,为什么不执行exec调用呢?
  exec(C:\inetpub\wwwroot\mywebsite\wkhtmltopdf );
  echo(exec(wkhtmltopdf.exe cache.html output.pdf));
  exec("xvfb-run -a wkhtmltopdf test.html output.pdf")
  $execute = "xvfb-run -a wkhtmltopdf cache.html output.pdf";
  $out = shell_exec("/path/to/wkhtmlto­pdf --version"); echo($out); 
  $out = passthru('/usr/local/bin/wkhtml2pdf