您不应该在库周围加上引号。您可以通过以下方式捕获命令的输出:
$commandString = '../wkhtmltopdf/wkhtmltopdf-i386 http://www.estiroad.com/export.php file.pdf 2>&1';
$output = shell_exec($commandString);
在2>&1
UNIX 中将意味着输出将通过。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 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"));