繁体   English   中英

中止 PHP 脚本尝试通过 SSH 请求 Ajax 连接?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM