在处理ssh2_auth_password()
函数(以及ssh2_connect()
)上的错误时,我有点挣扎。我成功地管理连接并登录到我的远程服务器,但是,当提供错误的凭据时,我希望能够处理这些情况。我正在使用ZF 1.12,我已经创建了一个小控制器插件:
<?php
class My_Controller_Plugin_Scp extends Zend_Controller_Plugin_Abstract
{
private $host;
private $login;
private $password;
private $destDir = '.';
private $connexion;
public function __construct()
{
$co = ssh2_connect($this->getHost(), 22);
if(false === $co)
throw new Exception('Can\'t connect to remote server');
$this->setConnexion($co);
}
/**
* @return bool
* @throws Exception
*/
public function auth()
{
$auth = ssh2_auth_password($this->getConnexion(), $this->getLogin(), $this->getPassword());
if($auth === false)
throw new Exception('Authentication failed!');
return $auth;
}
我在我的控制器中使用这个插件:
try {
// Préparation à la copie en SSH du fichier template
$scp = new My_Controller_Plugin_Scp();
$scp->auth(); // Authentification
} catch(Exception $e) {
echo $e->getMessage();
$this->getHelper('Redirector')->setGotoRoute(array(), 'ficheVoir');
exit();
}
实际输出是,当我弄清楚凭据时,会抛出PHP警告,而我希望能够显示自定义错误消息。
我的Exception
和东西有什么问题吗?
答案 0 :(得分:3)
我无法测试您的代码,因为很多东西都丢失了。 我根据你的代码编写了一个简单的连接函数:
<?php
function connect() {
$host = '';
$login = '';
$password = '';
$co = ssh2_connect($host, 22);
if (false === $co)
throw new Exception('Can\'t connect to remote server');
$result = @ssh2_auth_password($co, $login, $password);
var_dump($result);
if ($result === false) {
throw new Exception('Authentication failed!');
}
echo 'Connection estabilished';
}
try {
connect();
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
我使用@
来抑制PHP警告,不要抛出丑陋的PHP错误消息。如果$result
为false
,则会抛出Exception
并正在正确处理。基本上,解决方案只是在@
函数之前添加ssh2_auth_password()
。