我知道这个topis已经存在,但没有一个答案对我有帮助......我将wkhtml文件夹从我的硬盘复制到服务器上。我跑的时候 exec('“../wkhtmltopdf / wkhtmltopdf.exe”“www.estiroad.com/export.php”“C:/EXTREM.pdf”');
没有任何反应......我是否正确输入路径?我的意思是,我需要输入wkhtmltopdf的确切路径,根据我从哪里运行exec命令,对吧?如果我想将它保存到用户硬盘上,我需要使用绝对路径,对吧?奇怪的是,它没有给我任何错误,只是默默地做什么......我发现了PHP绑定,但我不明白如何使用它们......每个人只在Linux中解决这个问题,那对我来说毫无价值:(任何帮助将不胜感激。
答案 0 :(得分:2)
使用knplabs中的snappy。它是wkhtmltopdf的包装并处理案例。
答案 1 :(得分:1)
(我有wkhtmltopdf的经验,但仅限于* nix)
我的建议:首先在没有PHP的情况下做一切,不要执行exec()。
只需确保您可以在命令行上键入命令以创建PDF。
您确定在机器上安装了WebKit吗? wkhtmltopdf.exe取决于它。
只有在确定可以从命令行生成后,才能尝试将操作转换为PHP。同时确保PHP具有执行wkhtmltopdf.exe的适当权限,并且有权写入C:/EXTREM.pdf。
答案 2 :(得分:1)
你不应该在库中放置引号。你可以这样捕获命令的输出:
$commandString = '../wkhtmltopdf/wkhtmltopdf-i386 http://www.estiroad.com/export.php file.pdf 2>&1';
$output = shell_exec($commandString);
UNIX中的2>&1
意味着输出将通过。 1是标准输出。 2是stderr。
希望这会有所帮助。
或在Windows中
$commandString = '../wkhtmltopdf/wkhtmltopdf.exe http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));
从权限问题看起来你在linux上运行生产脚本。转到生产服务器并运行
$ uname -a
你会得到类似的东西:
Linux ora100 2.6.5-7.252-smp#1 SMP Tue 2月14日11:11:04 UTC 2006 x86_64 x86_64 x86_64 GNU / Linux
x86_64建议您运行64位CPU,如果是这样的话,请下载amd64版本的二进制文件,否则请下载i386版本。两者都可以从这个网址中获得:http://code.google.com/p/wkhtmltopdf/downloads/list
保持Windows二进制文件。你有配置文件吗?如果你确实有一个开关,你可以根据你的环境将库路径分配给一个常量。
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
// this is windows server
define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf.exe");
} else {
// or the 64 bit binary?
define('WKHTML_LIB', "../wkhtmltopdf/wkhtmltopdf-i386");
}
然后更改启动wkhtmltopdf的代码:
$commandString = WKHTML_LIB' http://www.estiroad.com/export.php file.pdf 2> output';
print $out ? $out : join("", file("output"));