0

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でスクリプトを閉じる/終了する方法が見つかりません。

誰かが私がそれをどのように行うことができるかについての考えを持っていますか?ありがとうございました。

マリックスの答えに合うように編集してください:

$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);

残念ながら、7zipstanaloneコンソールプロセスは引き続きバックグラウンドで実行されます。セッション変数の値は1(整数)であることが確認されています。

編集..:jqueryでセッション変数を変更するリクエストが最初のスクリプトが完了するまで待機していることに気づきました。だから、役に立たない:(

4

1 に答える 1

0

PHPスクリプトで、特定のセッションが設定されているかどうかを毎回確認してから、再度ループしてください。ユーザーがABORT
を クリックすると、そのセッション キーが終了します。 これは、セッションの代わりにデータベースを使用して実装することもできます。

于 2013-01-16T18:39:00.700 に答える