Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obsługa wyjątków
Forum PHP.pl > Forum > Przedszkole
DNMX
Hej.
Jak pisałem we wcześnuiejszych tematach, walczę z logowaniem się na pocztę IMAP przy użyciu ddeboer/imap. Mam do sprawdzania regularnie kilka skrzynek e-mail. Ich dane dostępowe mam w bazie danych. Mam taki skrypt:
  1. $q = "SELECT * FROM `skrzynki`";
  2. $res = $mysqli -> query($q);
  3. while($row = mysqli_fetch_assoc($res)) {
  4. $server = new Server($row['server']);
  5. $connection = $server->authenticate($row['email'], $row['pass"]);
  6. .... dalsza część kodu
  7. }

Wszystko było ok gdy wszystkie dane dostępowe do skrzynek się zgadzały. Jeśli np. hasło do drugiej było niewłaściwe to przerywało cały skrypt z komunikatem:
Kod
PHP Fatal error:  Uncaught Ddeboer\Imap\Exception\AuthenticationFailedException: [E_WARNING] Authentication failed for user "login@onet.pl": imap_open(): Couldn't open stream {imap.poczta.onet.pl:993/imap/ssl/validate-cert}
imap_alerts (0):
imap_errors (1):
- Can not authenticate to IMAP server: [AUTHENTICATIONFAILED] Authentication failed. in /var/www/ddeboer/imap/src/Server.php:87
Stack trace:
#0 /var/www/imapd/index.php(82): Ddeboer\Imap\Server->authenticate()
#1 {main}
  thrown in /var/www/imapd/vendor/ddeboer/imap/src/Server.php on line 87

Czasami si ę tak zdarza, że ktoś używa na zmiane dwóch haseł dlatego dodałem do bazy danych pole 'pass2' i zmieniłem kod żeby uwzględniał też to drugie hasło:
  1. $q = "SELECT * FROM `skrzynki`";
  2. $res = $mysqli -> query($q);
  3. while($row = mysqli_fetch_assoc($res)) {
  4. $server = new Server($row['server']);
  5. try {
  6. $connection = $server->authenticate($row['email'], $row['clean']);
  7. } catch (AuthenticationFailedException $e) {
  8. echo "Mamy złe hasło, próbujemy zalogować się starym ".$e->getMessage();
  9. $connection = $server->authenticate($row['email'], $row['pass2']);
  10. }
  11. .... dalsza część kodu
  12. }

Ale nie próbuje tego drugiego hasła. Nie wyświetla się nawet komunikat "Mamy złe hasło, próbujemy zalogować się starym ". Dlaczego?
viking
A zaimportowałeś Ddeboer\Imap\Exception\AuthenticationFailedException w kodzie?
DNMX
Tak, na początku mam:
  1. <?php
  2. include("vendor/autoload.php");
  3. use Ddeboer\Imap\Server;
  4. use Ddeboer\Imap\Connection;
  5. use Ddeboer\Imap\Exception\AuthenticationFailedException;
  6. use Ddeboer\Imap\SearchExpression;
  7. use Ddeboer\Imap\Search\Email\From;
  8. use Ddeboer\Imap\Search\Text\Body;
  9. use Ddeboer\Imap\Search\Text\Keyword;
  10. use Ddeboer\Imap\Search\Text\Subject;
  11. use Ddeboer\Imap\Search\Text\Text;
viking
Z kodu tej klasy wynika że metoda authenticate sypie tym wyjątkiem co wyżej więc błąd musi być gdzieś indziej. Natomiast i tak, dla drugiego hasła pojawi się PHP Fatal error: Uncaught Ddeboer\Imap\Exception\AuthenticationFailedException bo nie ująłeś w try/catch. Ale i tak powinno wyświetlić się echo. Staraj się pisać już zachowując jeden styl skoro w linii 2 używasz obiektów to czemu w linii 3 przechodzisz na funkcję?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.