Vypnutí exceptions, aby si chybu vyhodnotil script

Terka04
Člen | 44
+
0
-

Dobrý den,
ráda bych se zeptala. Ladím např.: imap_open() s tím, že si může uživatel v administraci nastavil login a heslo. Jenže… Když je vše OK, script funguje dobře. Když ale je login NOK, vyhazuje mi laděnka chybu a to nechci. Chci říct uživateli: „Hele, nepodařilo se spojit se serverem, něco máš blbě.“ Jak na to?

Zkoušela jsem:

try {
$mbox = imap_open("{".$this->smtp_host.":$port/imap/$protocol}INBOX", $this->smtp_username, $this->smtp_passwd);
$n_msgs = imap_num_msg($mbox);
} catch (Exception $e) {
$this->flashMessage("Chyba, nepodařilo se spojit se serverem.", "danger");
}

Ale laděnka se mi zastaví a řekne mi: imap_open(): Couldn't open stream {:25/imap/}INBOX

Ráda bych ten catch otestovala při zapnuté laděnce, co to bude dělat, aby neskočila chyba 500. Nejde mi tedy konkrétně jen o imap_open, ale celkově pro různé funkce.

Díky všem za pomoc. :)

Editoval Terka04 (24. 9. 2021 15:16)

m.brecher
Generous Backer | 736
+
0
-

Máš v projektu celý Nette Framework ? Pokud ano, tak je potřeba nastavit debugger tak, aby byla laděnka zapnutá jenom pro vývojáře a pro uživatele nikoliv. Když je laděnka vypnutá a server v production módu, tak vzniklé chyby může zachytávat např. ErrorPresenter (to je potřeba nakonfigurovat) ErrorPresenter potom zajistí správné vykreslení chybových stránek pro 500, 403 a 404. Zrovna jsem dokončil detailní návrh ErrorPresenteru. Napiš více informací – je v projektu Nette, nebo jenom PHP?

David Grudl
Nette Core | 8111
+
+2
-

Když se podíváš do dokumentace imap_open, tak tam uvidíš, že Returns an IMAP stream on success or false on error.. Tedy nevyhazuje v případě chyby výjimku, ale je potřeba otestovat, zda vrácená hodnota v proměnné $mbox není false. Takhle se chová drtivá většina funkcí v PHP.