2016-01-13 51 views
0

我试图从Linux下的php5脚本创建一个tarball,我并不真正关心输出;我迄今立即找到方法是简单地php5在后台进行系统调用

system("tar czf tarball.tgz directory/path &"); 

但是我想后台进程

检查system() documentation它提到其将输出重定向到文件

然而

system("tar czf tarball.tgz directory/path > /dev/null 2>&1"); 

没有帮助。 system()函数不带文件描述符...我错过了什么?

测试这些:

脚本test.php

<pre><?php 

exec("bash dodate 2>&1 /dev/null &"); 
system("echo done at \$(date)"); 

?></pre> 

脚本./dodate

sleep 5 
date 

我去我的浏览器,并调用/刷新页面;它确实需要5秒,然后印刷/更新“完成”消息。

谢谢

+0

那'&'你的第一个片段的末端应使其在后台运行 - 不是吗?你需要将输出/结果报告给你的PHP程序吗?还是只能在不知情的情况下继续? – mopo922

+0

如果你不关心输出,'exec()'可能是你更好的选择:http://php.net/manual/en/function.exec.php – mopo922

+0

唉,&符号不会背景过程......具体来说,我通过创建一个脚本“dodate”来测试这个脚本,内容是sleep 5;日期“,然后调用'system(”bash dodate&“)'但它等待,然后打印输出...! 与exec的效果相同 – taifwa

回答

0

你“没有”在PHP的线程。你可以做的一个技巧就是向另一个做你想要的php的curl请求。你需要确保你的curl很快就会超时,并且当curl超时关闭它的http连接时,另一个php不会死。

您还可以阅读关于此话题:cURL Multi Threading with PHPcURL Multi Threading?