【问题标题】:How to open and close a process with PHP?如何使用 PHP 打开和关闭进程?
【发布时间】: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


    【解决方案1】:

    在您的 php 脚本中,每次在再次循环之前检查是否设置了特定会话。
    当用户单击 ABORT 时,终止该会话密钥。
    这也可以使用数据库而不是会话来实现。

    【讨论】:

    • 感谢 mallix 的提示。每个循环检查一个 $_SESSION 变量不会太慢吗?您是否知道是否有可能以任何方式获得有关命令进度的更多详细信息?
    • 不,它一点也不慢。您可以计算已解析的行数,甚至可以捕获已解析的最后一行并通知用户。
    • 完成。 (谢谢)但它不起作用,进程仍在后台运行(任务管理器)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-09
    相关资源
    最近更新 更多