[英]Abort a PHP script trying to connect through SSH with an Ajax request?
Bonjour,我正在尝试使用 PHP 和phpseclib连接到路由器。
<?php
function connect_ssh(){
set_time_limit(10);
ob_start();
register_shutdown_function('shutdown');
if(connection_aborded()){
die();
}
function shutdown(){
print ob_get_clean();
}
$res = array();
$a = new Net_SSH2($host);
$a->write("show time\r\n");
try{
$res[] = $a->read('\r\n');
$res[] = $a->read('\r\n');
$res[] = $a->read('#');
} catch(Exception $e)
{
ob_flush();
var_dump(compact('e','res'));
}
} return json_encode(compact('e','res'));?>
我使用 jQuery 调用这个 function:
$.ajax({
url:'myURL',
data: null,
type: 'POST',
dataType: 'json',
success: function(z){ console.log(z);}
});
我想按需停止我的 php 脚本,因为有时,如果在 routeur 答案中找不到参数,“Net_SSH2::read()”会失败。 (即如果有语法错误)。
更常见的是,在请求失败后,我无法重新连接到我的 web 服务器,我不得不等待很长时间,甚至重新启动 Apache...
谢谢你的帮助...
使其循环检查数据库并将 AJAX 位发布到另一个脚本,该脚本仅将退出值插入数据库。
编辑:我不确定我是否完全理解你的代码,但我会这样做:
function() {
$con = database_of_choice($host, $user, $pass, $db);
while (!$quitter) {
$r = $con->query('SELECT shouldquit FROM info LIMIT 1');
if ($r['shouldquit'] == 'quit') {
$quitter = true;
continue;
}
//important connection stuff here...
}
}
您可以在运行时设置较低的max_execution_time
:
ini_set('max_execution_time', 10); // maximal execution time in seconds
这可确保脚本本身在 10 秒后结束,即使它尚未完成。 您必须选择的时间,取决于它可以占用多长时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.