Я написал функцию в Laravel для проверки SFTP-соединения с предоставленными пользователем учетными данными сервера. Эта функция работает нормально и показывает соответствующее сообщение о состоянии соединения.
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';
}
}
}
Когда пользователь указывает недопустимый хост, происходит внутренняя ошибка сервера. Поэтому я не могу получить сообщение в возврате для отображения.
Как я могу получить правильное сообщение об ошибке в ответ на эту функцию?
Образец (при предоставлении фактических учетных данных)
{
"status":true,
"connectionStatus":"success"
}
Внутренняя ошибка сервера (при указании неправильного имени хоста или IP-адреса)
{
"message": "Cannot connect to invalid.host.com:22. Error 113. No route to host",
"exception": "ErrorException",
"file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
"line": 1139,
"trace": [
{
"function": "handleError",
"class": "Illuminate\\Foundation\\Bootstrap\\HandleExceptions",
"type": "->"
},
{
"file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
"line": 1139,
"function": "user_error"
},
{
"file": "/var/www/html/rvhost_admin/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php",
"line": 2158,
"function": "_connect",
"class": "phpseclib\\Net\\SSH2",
"type": "->"
},
Обновлять: Я переписал функцию, добавив try -- catch, но все равно получаю ту же ошибку...
// SFTP connection test
if ($this->protocol === 'sftp') {
try {
$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';
}
} catch(Exception $e) {
$returnData = $e->getMessage();
}
}
Просто поймайте ошибку.
Вы не упомянули, как вы вызываете эту функцию. Возврат - это ответ json, я думаю, вы используете его как API, верно?
@rbvishnu извините, что упоминаю об этом в моем вопросе. Я написал этот файл как API для углового проекта. Я вызвал эту функцию из файла angular6 service.ts.
Является ли ваше пространство имен кода? Если это так, вам может понадобиться сделать } catch(\Exception $e) { вместо } catch(Exception $e) {.






Я думаю, вы можете справиться с этим с помощью subscribe(), как показано ниже. Сообщение о внутренней ошибке 500 попадет в «ошибку». просто утешьте эту «ошибку», чтобы просмотреть сообщение
this.service.functionname(this.form.value).subscribe(data => {
console.info(data);
}, error => {
console.info(error);
});
Я не думаю, что со стороны angular. Тем не менее я думаю исправить эту проблему с конца PHP. В любом случае спасибо за ответ..
использовать метод try catch