Vypnutí exceptions, aby si chybu vyhodnotil script
- Terka04
- Člen | 44
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 | 873
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 | 8239
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.