我正在尝试在PHP中编写一个将通过AJAX请求调用的函数。如果访问者中止了AJAX请求,该函数将运行一些bash命令并在服务器端中止。
到目前为止,我已经编写了以下代码。它确保bash命令的运行时间不超过5分钟,并在命令返回“yes”或“no”时停止。但我有两个问题:
MyXHR.abort()
),connection_status() == CONNECTION_NORMAL
检查仍会返回true
。我怎么能让它破裂?_
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--;
}
}