我剛剛從4.2升級到5.0。我得到了我所有的命令,但我注意到在一個腳本中,我看到一個報告錯誤(預期錯誤)的錯誤。問題是,它打破了我的腳本繼續而不是繼續在foreach循環中的下一步。 4.2上相同腳本的錯誤將報告錯誤並繼續。帶有ErrorException的控制檯命令退出我的腳本,而不是在出錯後繼續
4.2:Cannot connect to xyz.IP Error 60. Operation timed out
5.0:[ErrorException] Cannot connect to xyz.IP Error 60. Operation timed out
欲瞭解更多背景:我使用的腳本SSH到幾臺服務器,並運行ping命令。我正在使用Phpseclib 1.0。我已經測試了我的舊版本4.2的phpseclib,它工作正常。 5.0是問題發生的地方。
有誰知道我可以如何讓腳本在ErrorException之後繼續運行?
foreach ($query as $key => $value) {
$ssh = new Net_SSH2($value->origin_ip);
$key = new Crypt_RSA();
$key->loadKey(decryptIt($value->password));
if (!$ssh->login($value->username, $key)) {
exit('Login Failed');
}
$this->info(' Running Ping');
//$ssh->setTimeout(1);
if ($ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX)) {
//echo "reading";
//$this->info(' Running Ping');
//$ssh->setTimeout(4);
$statusOutput=$ssh->exec("ping -c 1 -W 1 ".$value->destination_ip." >/dev/null 2>&1; echo $? ");
} else {
//echo "not reading";
$this->error("Unable to Read Ping");
}
}
我解決它。我原來的代碼確實有try/catch塊,但我在這裏省略了它。問題真的很蠢。我的try catch使用catch(Exception $ e)',但我需要的是catch(\ Exception $ e)'。注意斜槓。看到另一個線程,嘗試它,它的工作。錯誤仍然存在,但腳本繼續,這是我所需要的。 – Envious
斜槓是用於命名空間的,在本例中是根或全局命名空間,是的,如果您在另一個命名空間並且沒有導入根異常類,則必須爲Exception類使用正確的名稱空間名稱。至於已經嘗試...catch,這是你的示例代碼中遺漏的一個奇怪的東西,而你的問題陳述完全沒有提及這個 - 事實上,問題陳述表明沒有捕獲異常,這就是我發佈這個答案的原因。你們浪費了我的時間,錯誤地表達了你的問題:/ –