【发布时间】:2013-01-16 18:26:31
【问题描述】:
如何用 PHP 打开和关闭进程?
现在我使用以下代码打开一个进程:
$zoutput = array();
if( ($fp = popen("7za t \"".$path."\" * -r", "r")) ) {
while( !feof($fp) ){
$fread = fread($fp, 1024);
$line_array = preg_split('/\n/',$fread);
foreach($line_array as $a) {
if($a != "") {
$zoutput[] = $a;
}
}
//$_SESSION['job'][$jobid]['currentfile'] = $_SESSION['job'][$jobid]['currentfile']+1;
flush();
}
pclose($fp);
}
我正在寻找一种解决方案来关闭进程,以防用户想要中止。即使我停止了 php 脚本,该进程仍然在后台运行(这很正常),但我找不到在 Windows 下关闭/终止它的方法。
有人知道我该怎么做吗?谢谢。
编辑以适应 mallix 的回答:
$zoutput = array();
if( ($fp = popen("7za a -t7z ".$GLOBALS["backup_compression"]." \"".$_SESSION['job'][$jobid]['bFQN']."\" \"".$pathtobackup."\"", "r")) ) {
while( !feof($fp) ){
//Verifying if the user want to abort the process
if(isset($_SESSION['job'][$jobid]['AbortCurrentJob']) && ($_SESSION['job'][$jobid]['AbortCurrentJob'] == 1)) {
pclose($fp);
return;
}
$fread = fread($fp, 1024);
$line_array = preg_split('/\n/',$fread);
foreach($line_array as $a) {
if($a != "") {
$zoutput[] = $a;
}
}
//$_SESSION['job'][$jobid]['currentfile'] = $_SESSION['job'][$jobid]['currentfile']+1;
flush();
}
pclose($fp);
}
echo json_encode($zoutput);
不幸的是,7zip 独立控制台进程仍在后台运行。会话变量的值是 1(整数)确认。
编辑..:我刚刚注意到使用 jquery 更改会话变量的请求正在等待....直到第一个脚本完成。所以,没用的:(
【问题讨论】:
标签: php process window popen proc-open