2017-03-01 110 views
1

我有一段腳本,可能會在一段時間後不會變爲非活動狀態,因爲它會從會話過期時間短的非常慢的服務器請求信息。
腳本echo在完成其每個過程之後,將其作爲調試代碼的方式完成。是否有任何方法從另一個腳本執行腳本並在最後一次echo之後的一段時間內將其終止。換句話說,在非活動狀態後殺死腳本。
編輯:這裏我們可以SE我的代碼示例:PHP處於非活動狀態後終止進程

foreach ($info["Ten_Friends"] as $friend) { 
    $info = []; 
    echo "11111 \n"; 
    $info = $i->userAnalysis($friend); 
    if ($info != false) { 
     echo "if to database\n"; 
     if (($i->usersDatabase($info) == true)) { 
      mediaDataBase($info); 
      $nAnalized += 1; 
      echo "nAnalized: ".$nAnalized."\n"; 
     } 
    } else {echo $friend." not analised";} 

    echo "3333\n"; 
} 

正如你可以看到,每道工序後,我echo。這兩個$i->userAnalysis($friend);$i->usersDatabase($info)請求數據到服務器此功能可能會在一段時間後變得沒有響應,所以我需要殺死腳本,如果他們這樣做。
在OSX埃爾卡皮坦和MySQL運行PHP 5.6

+0

請添加您的代碼。閱讀這裏看看如何形成[mcve] – amflare

+0

@amflare這裏是一個例子 –

回答

0

試試這個:

$cmd = "php AnalyzeFriends.php"; 
$timeout_tolerance = 10; // 10 seconds 
$last_response = time(); // start time 

ob_implicit_flush(true); 
ob_end_flush(); 

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
    1 => array("pipe", "w"), // stdout is a pipe that the child will write to 
    2 => array("pipe", "w") // stderr is a pipe that the child will write to 
); 
flush(); 
$process = proc_open($cmd, $descriptorspec, $pipes, realpath('./'), array()); 
echo "<pre>"; 
if (is_resource($process)) { 
    while ($s = fgets($pipes[1])) { 
     print $s; 
     if((time() - $last_response) > $timeout_tolerance){ 
      fclose($pipes[0]); 
      fclose($pipes[1]); 
      fclose($pipes[2]); 
      proc_close($process); 
     } 
     $last_response = time(); 
     flush(); 
    } 
} 
echo "</pre>"; 

運行這個作爲一個單獨的腳本可以調用腳本您已發佈,尋找回聲,如果它不收到迴應

+0

感謝您的答案,'$ pipe'變量會代表什麼? –

相關問題