我已经在我的链接 VPS中安装了wkhtmltopdf库,当我使用诸如"wkhtmltopdf https://www.google.com google.pdf“这样的终端从服务器上运行它时,我在输出中得到如下消息:
加载页(1/6)计数页(2/6)
解析链接(4/6)
加载页眉和页脚(5/6)
印刷页(6/6)已完成
PDF被创建。
现在,当我在exec命令中使用PHP时,如下所示:
<?php
$output = shell_exec("/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf");
var_dump($output);
?>PDF文件已经创建,看起来一切正常,但我得到的值为$output变量的NULL。为什么exec命令不提供相同的输出?
谢谢
发布于 2015-07-31 22:28:43
如果您不想看到一个echo结果,您可能应该使用output:
$output = shell_exec("/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf 2>&1");
echo($output);由于输出格式看起来很糟糕,所以也可以清除:
$output = shell_exec("/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf 2>&1");
$tidyit = preg_replace("/(.[^\[]*\s\d{1,2}%)\s(?<!100%)|([=>\[]*)/","",$output);
$result = preg_replace("/]/","<br>",$tidyit);
echo($result);结果
Loading pages (1/6) 100%
Counting pages (2/6)
Object 1 of 1 Resolving links (4/6)
Object 1 of 1 Loading headers and footers (5/6)
Printing pages (6/6)
Preparing
Page 1 of 1 Done 发布于 2015-07-31 20:48:20
shell_exec和exec的不同之处在于,shell_exec的返回值是输出,而exec只给出最后一行-如果要使用exec检索输出,则需要传入数组的第二个参数,您希望将结果存储在:
<?php
exec("/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf",$output)
var_dump($output)
?>您也可以使用backticks代替shell_exec。
<?php
$output = `/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf`;
var_dump($output);
?>请参阅PHP执行操作符
PHP支持一个执行操作符: backticks ()。注意,这些不是单引号!PHP将尝试以shell命令的形式执行backticks的内容;输出将被返回(也就是说,它不会简单地转储到output;它可以分配给一个变量)。反勾符的使用与shell_exec()完全相同。
附加
您的代码是正确的,但是脚本可能是在wkhtmltopdf完成之前超时,这意味着它永远不会接收返回值。尝试这样做来扩展php的超时,并给它时间来完成它的wkhtmltopdf进程:
<?php
set_time_limit(60); // 60 seconds should be long enough to create your pdf
$output = `/usr/local/bin/wkhtmltopdf https://www.google.com google.pdf`;
var_dump($output);
?>https://stackoverflow.com/questions/31754874
复制相似问题