假设我想通过我的网页在表单上运行带有PHP的服务器端命令。该命令是du -hs,可能需要几分钟才能完成。我可以在某种方式使用exec()或shell_exec(),以便网页立即重新加载并且不等待命令的输出吗?一个例子会很棒!谢谢!
<?php
exec('du -hs');
?>
答案 0 :(得分:4)
HACK ALERT,但是如果你不想背景它(比如说你需要对结果做些什么)并且在完成时不关心你可以将命令放在对象的析构函数方法中。请注意,虽然用户将获得他们的响应并可以自由地请求另一个页面,但在完成之前,该过程将不会从Apache或PHP-fpm中释放。
class someClass{
function __destruct(){
exec('du -hs');
}
}
注意:在后台处理任务的强大方法是使用使用gearman,rabbitMQ等构建的消息队列和作业服务处理程序。
答案 1 :(得分:2)
Arno van den Brink的exec()
PHP文档中的top comment为您提供了答案:
这将在后台(没有cmd窗口)执行$ cmd,而无需PHP等待它在Windows和Unix上完成。
<?php
function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}
?>
答案 2 :(得分:1)
听起来您想要在网页上显示du
的结果,但不要等待它。这需要ajax调用。
加载您的网页,其中包含div
,如:
<div id="du-div">Calculating filespace...</div>
然后onload,通过ajax调用你的du.php,它会运行并返回你的文件用法。然后使用内容更新div。