在服务器端中止AJAX请求(PHP)

时间:2017-02-21 11:36:05

标签: php jquery ajax bash

我正在尝试在PHP中编写一个将通过AJAX请求调用的函数。如果访问者中止了AJAX请求,该函数将运行一些bash命令并在服务器端中止。

到目前为止,我已经编写了以下代码。它确保bash命令的运行时间不超过5分钟,并在命令返回“yes”或“no”时停止。但我有两个问题:

  • 如果在客户端取消了AJAX请求(在Java Script中使用MyXHR.abort()),connection_status() == CONNECTION_NORMAL检查仍会返回true。我怎么能让它破裂?
  • 当取消AJAX请求时,我想杀死使用bash命令启动的进程以节省计算能力。是否可以这样做?

_

function my_function($post) {

        $command = 'my_bash_command';
        $output_file = 'output.txt';
        exec('bash -c "exec nohup setsid ' . $command . ' > '.$output_file .' 2>&1 &"');

        $phpTimeoutCountdown=5*60; // 5 minutes max
        while($phpTimeoutCountdown>0){
            if(connection_status() == CONNECTION_NORMAL){
                if(file_exists($output_file )){
                    $output_value=exec('tail -n 1 '.$output_file );
                    if(in_array($output_value,["yes","no"])){
                        return($output_value);
                    }
                }
            }else{
                return(false);  
                // If connection is broken, then it should return false
                // in order to allow a new AJAX request to start being executed in PHP
            }
            sleep(1);  // Sleep for 1 second
            $phpTimeoutCountdown--;
        }
}

0 个答案:

没有答案