我有一个脚本,因为它会在一段时间后可能会在一段时间后不活动,因为它从非常慢的服务器中请求信息,而短时间的时间很短。
脚本echo
s在每个过程后完成后,作为我调试代码的方式。是否有任何方法可以从另一个脚本执行脚本并在上次echo
之后杀死它。换句话说,在不活动之后杀死脚本。
编辑:在这里我们可以示出我的代码的示例:
foreach ($info["Ten_Friends"] as $friend) {
$info = [];
echo "11111 n";
$info = $i->userAnalysis($friend);
if ($info != false) {
echo "if to databasen";
if (($i->usersDatabase($info) == true)) {
mediaDataBase($info);
$nAnalized += 1;
echo "nAnalized: ".$nAnalized."n";
}
} else {echo $friend." not analised";}
echo "3333n";
}
如您所见,每个过程之后i echo
。$i->userAnalysis($friend);
和$i->usersDatabase($info)
都向服务器请求数据,此功能在一段时间后可能会变得无反应,因此,如果它们这样做,我需要杀死脚本。
在OSX El Capitan和MySQL上运行PHP 5.6
尝试以下:
$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>";
将其作为一个单独的脚本运行,可以调用您已发布的脚本,请查找Echos,如果它没有收到