我有一个脚本可能会在一段时间后变为非活动状态,因为它会从一个非常慢的服务器请求信息并且会话过期时间很短。
脚本none;
在每个进程完成之后进入shell,作为调试代码的方式。有没有办法从另一个脚本执行脚本并在最后echo
一段时间后终止它。换句话说,在不活动后杀死脚本
编辑:这里我们可以举例说明我的代码:
echo
如您所见,我在每个流程后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);
都向服务器请求数据,此功能可能在一段时间后无响应,因此如果他们这样做,我需要终止脚本。
在Osx El Capitan和mysql上运行Php 5.6
答案 0 :(得分: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>";
将此作为单独的脚本运行,可以调用您发布的脚本,查找回声,如果它没有收到回声