SFTP主机无效时如何获取正确的错误消息

时间:2019-04-04 10:18:46

标签: php laravel angular6 sftp phpseclib

我在Laravel中编写了一个函数,用于使用用户提供的服务器凭据来测试SFTP连接。此功能运行良好,并显示有关连接状态的适当消息。

    var timeLeft = 3;
    var videoCounter = 2;
    var videoText = 2;
    var elem = document.querySelector('.countdown-content__count');
    var timerId;

    function countdown() {
      if (timeLeft == 0) {
        clearTimeout(timerId);
        $(".countdown-content__timer").fadeOut();
        $(".video-wrapper span").fadeOut();
        var playPromise = $("#video")[0].play();
      } else {
        elem.innerHTML = timeLeft;
        timeLeft--;
      }
    }

    function practiceShot(){
      setTimeout(function(){
        $(".countdown-content__head").slideUp(1000, function(){
              $(".countdown-content__timer").css({
                  opacity: 0,
                  display: 'inline-block'     
              }).animate({opacity:1},600);
              timerId = setInterval(countdown, 1000);
              countdown();
            });
          }, 2000);
    }
    practiceShot();
    document.getElementById('video').addEventListener('ended', function() {
        if (videoCounter == 0) {
            return;
        }
        document.getElementsByClassName("countdown-content__head")[0].innerHTML = "<span>Practice Shot </span>" + videoText;
        videoText++;
        videoCounter--;
        timeLeft = 3;
        elem.innerHTML = "";
        $(".countdown-content__timer").fadeIn();
        $(".video-wrapper span").fadeIn();
        $(".countdown-content__head").slideDown(1000, function(){
              $(".countdown-content__timer").css({
                  opacity:1,
                  display: 'inline-block'     
              }).animate({opacity:0},600);
        });
        practiceShot();
    }, false);


     <div class="practice-shot-screen full-screen-height">
            <div class="row">
              <div class="col-sm-6">
                  <span class="video-wrapper">
                      <video id="video" muted>
                        <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4">
                        <source src="https://www.w3schools.com/html/mov_bbb.ogg" type="video/ogg">
                        Your browser does not support HTML5 video.
                      </video>
                      <span></span>
                    </span>
              </div>
              <div class="col-sm-6">
                 <div class="practice-shot-image">
                     <img alt="" src="images/practice-image.jpg">
                 </div>              
              </div>
            </div>

            <div class="countdown-content">
               <div class="v-align-container">
                  <div class="v-align-grid">
                        <div class="countdown-content__head">                        
                              <!-- <strong> <img alt="" src="images/hd-border.png"> </strong>         -->
                              <span>PRACTICE SHOT 1</span> 
                              <!-- PRACTICE SHOT 1  -->
                              <!-- <strong> <img alt="" src="images/hd-border.png"> </strong> -->
                        </div>
                        <div class="countdown-content__timer">


                        <!--test-->



                        <!--test-->


                          <span class="countdown-content__count"></span>
                        </div>
                  </div>   
               </div>

            </div>

          </div><!--practice-shot-screen-->



Css : 

.practice-shot-screen {
    position: relative;
}

.practice-shot-screen .row {
    height: 100%;
    margin: 0;
}

.practice-shot-screen [class^="col-"] {
    padding: 0;
}

.practice-shot-screen .v-align-container {
    position: relative;
}

.practice-shot-screen .video-wrapper {
    height: 100%;
    width: 100%;
  display: inline-block;
  position: relative;
}

.video-wrapper span {
  content: '';
    display: block;
    width: 3000px;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
    background: #000;
    z-index: 1;
  opacity: 0.7;
}

.practice-shot-screen .video-wrapper video {
    height: 100%;
    width: 100%;
    display: inline-block;
    object-fit: cover;
}



.practice-shot-image {
    height: 100%;
    width: 100%;
}

.practice-shot-image img {
    height: 100%;
    width: 100%;
    object-fit: cover;
}


.countdown-content {
    max-width: 800px;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 20;
    margin: auto;
}



.countdown-content__head {
    font-family: 'Roboto', sans-serif;
    font-weight: 400;
    font-size: 85px;
    text-transform: uppercase;
    color: #fff;
    -webkit-text-stroke: 1px #fff;
    text-shadow: 0px 0px 10px #fff;
    text-align: center;
    position: relative;
    margin: 0;
}






.countdown-content__head::after {
    content: '';
    display: block;
    height: 147px;
    width: 770px;
    background: url(../images/hd-border.png) no-repeat; 
    text-align: center;
    margin: 0 auto;
    background-size:contain; 
}

.countdown-content__head::before {
    content: '';
    display: block;
    height: 147px;
    width: 770px;
    background: url(../images/hd-border.png) no-repeat; 
    text-align: center;
    margin: 0 auto;
    background-size:contain; 
}


.countdown-content__timer {
    font-family: 'beonwebfont';
    font-size: 320px;
    color: #ea3323;
    -webkit-text-stroke: 1px #ea3323;
    text-shadow: 0px 0px 10px #ea3323;
    width: 400px;
  height: 400px;
    border-radius: 50%;
    border: 1px solid #fff;

    border-color: #467fff; 
    -webkit-box-shadow: 0 0 15px #467fff; 
    -moz-box-shadow: 0 0 15px #467fff; 
    box-shadow: 0 0 30px #467fff; 

    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
  opacity: 0;
}



.countdown-content__timer > span {
    display: inline-block;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

.countdown-content__timer video {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    margin: auto;
}

当用户提供无效的主机时,发生内部服务器错误。因此,我无法在返回的消息中显示消息。

如何获取此函数的正确错误消息?

示例(同时提供实际凭据)

.my_section_noload ALIGN(32) (NOLOAD) :
{
  *(.my_section)
} > MEMORY_1

内部服务器错误(输入错误的主机名或IP时)

public function testConnection(Request $request)
{
    $data = $request->all();
    $this->protocol = $data['protocol'];
    $this->host = $data['domain_name'];
    $this->username = $data['username'];
    $this->password = $data['password'];
    $this->port = $data['port'];
    $returnData = $this->checkFtp();
    return response()->json(['status' => true, 'connectionStatus' => $returnData]);
}

public function checkFtp()
{
    // Variable initialization
    $returnData = 'success';

    // SFTP connection test
    if ($this->protocol === 'sftp') {
        $sftp = new SFTP($this->host, $this->port, $this->timeout);
        if ($sftp) {
            if (!$sftp->login($this->username, $this->password)) {
                $returnData = 'Unable to login to the SFTP server';
            }
        } else {
            $returnData = 'Unable to connect to SFTP server';
        }
    }
}

更新: 我通过添加try-catch重写了该函数,但仍然出现相同的错误...

{  
   "status":true,
   "connectionStatus":"success"
}

1 个答案:

答案 0 :(得分:1)

我认为您可以像下面的那样在subscribe()中处理此问题。 500内部错误消息将显示为“错误”。只需控制台该“错误”即可查看消息

this.service.functionname(this.form.value).subscribe(data => {
    console.log(data);
}, error => {
    console.log(error);
});