如何使用PHP打开和关闭进程?
如何使用PHP打开和关闭进程? 现在,我用以下代码打开一个流程:如何使用PHP打开和关闭进程?,php,process,window,popen,proc-open,Php,Process,Window,Popen,Proc Open,如何使用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) {
$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脚本中,在再次循环之前,每次检查是否设置了特定会话。
当用户单击“中止”时,终止该会话密钥。
这也可以使用数据库而不是会话来实现。感谢您提供的提示mallix。在每个循环中检查$\u会话变量并不太慢?您知道是否可以以任何方式获得有关命令进度的更多详细信息吗?不,一点也不慢。您可以计算解析的行数,甚至捕获解析的最后一行并通知back user.Done.(谢谢)但它不工作,进程仍在后台运行(任务管理器)