我知道这个主题已经存在,但没有一个答案对我有帮助...我将 wkhtml 文件夹从我的硬盘复制到服务器上。当我运行时 exec('"../wkhtmltopdf/wkhtmltopdf.exe""www.estiroad.com/export.php""C:/EXTREM.pdf"');
没有任何反应...我输入的路径是否正确?我的意思是,我需要根据运行 exec 命令的位置输入 wkhtmltopdf 的确切路径,对吗?如果我想把它保存到用户硬盘上,我需要使用绝对路径,对吗?奇怪的是,它没有给我任何错误,只是默默地什么都不做……我发现了 PHP 绑定(bind),但我不明白如何使用它们……每个人都只在 Linux 中解决了这个问题,这对我来说毫无值(value):(任何帮助将不胜感激。
最佳答案
你不应该将引号放在库周围。你可以通过这种方式捕获命令的输出:
$commandString = '../wkhtmltopdf/wkhtmltopdf-i386 http://www.estiroad.com/export.php file.pdf 2>&1';
$output = shell_exec($commandString);
UNIX 中的 2>&1
表示输出将通过。 1 是标准输出。 2 是标准错误。
希望这会有所帮助。
或者在窗口中
$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 Feb 14 11:11:04 UTC 2006 x86_64 x86_64 x86_64 GNU/Linux
x86_64 建议您运行的是 64 位 CPU,如果是这种情况,请下载 amd64 版本的二进制文件,否则请下载 i386 版本。两者都可以从这个 url 中得到: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"));
关于php - 如何从 PHP 执行 WKHTMLTOPDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11825776/