Я только что обновил с 4.2 до 5.0. Я получил все мои команды, но я заметил, что в одном скрипте я вижу ошибку (ожидаемую ошибку), которая сообщает об ошибке ErrorException. Проблема в том, что он прерывает мой сценарий, продолжая вместо перехода на следующий шаг в цикле 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. Я протестировал phpseclib на моей старой сборке 4.2, и она отлично работает. 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, это было странно, чтобы опустить из вашего примера кода, и ваш оператор проблемы совсем не упоминает об этом - действительно, оператор проблемы указывает на то, что не поймал исключение, поэтому я разместил этот ответ. Вы потратили впустую свое время и ошиблись в своей проблеме:/ –