Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]obsluga bledow
Forum PHP.pl > Forum > Przedszkole
misty
hej!
poczytalam troche o obsludze bledow, widze ze mozliwe jest przechwycenie bledu/wyjatku etc. ale czy ktos z Was orientuje sie moze czy mozna zrobic tak by przechwycic konkretny blad/ostrzezenie?
tzn.
chcialabym kazdy (tzn nie kazdy mozliwy, ale iles tam) blad/ostrzezenie moc przechwycic, ale nie na zasadzie takiej, np:
  1. <?php
  2. function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
  3. {
  4. switch ($errno)
  5. case E_WARNING:
  6. echo "ostrzezenie";
  7. break;
  8. }
  9. }
  10. set_error_handler("errorHandler");
  11. ?>

poniewaz to zwroci mi dla kazdego warningu "ostrzezenie"; a powiedzmy (przykladowo) ze w mojej aplikacji moga pojawic sie 4 rozne warningi i ja bym kazdy z nich chciala z osobna obsluzyc i dla kazdego inny komunikat wyslac. np.
powiedzmy ze na stronie pojawi mi sie komunikat:
  1. Warning: pg_query() [function.pg-query]: Query failed: in /var/www/htdocs/test.php on line 19


i teraz ja chce przechwycic ten konkretny warning i wyswietlic cos dla niego.
jak sie pojawi inny warning to co innego.. czyli jak konkretne tresci bledow przechwycic by je z osobna moc obsluzyc?
mam nadz ze napisalam w miare zrozumiale o co mi chodzi..

pzdr!


zaczelam cos sama kombinowac i wyszlo mi cos, ale nie do konca dziala jak nalezy. ale po kolei..
kawalek mojego kodu:
  1. <?php
  2. function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
  3. {
  4. switch ($errno)
  5. {
  6. case E_WARNING:
  7. //przypadek gdy nie mozna nawiazac polaczenia z hostem
  8. if ($errstr='pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: could not connect to
  9. server: Connection timed out Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?')
  10. {
  11. echo "brak polaczenie z hostem<br>";
  12. }
  13.  
  14. //przypadek gdy uzytkownik nie wpisze pytania lub wpisane pytanie jest niepoprawne
  15. elseif($errstr='pg_query() [function.pg-query]: Query failed: error!')
  16. {
  17. echo "niepoprawne zapytanie<br>";
  18. }
  19. break;
  20. }
  21. }
  22. set_error_handler("errorHandler");
  23. ?>


zrobilam specjalnie 2 przykladowe (brak polaczenia i niepoprawne zapytanie) bledy, za pomoca zmiennej $errstr wyciagnelam tresc tych warningow i teraz chce je z osobna obsluzyc.
problem jest taki, ze obslugiwany jest tylko pierwszy if.. czyli jak wylacze postgresa, to faktycznie na stronie ladnie mi sie pokaze 'brak polaczenia z hostem'. jednak gdy wlacze serwer i wpisze na stronie niepoprawne zapytanie, to nadal pojawi sie 'brak polaczenia z hostem'. sytuacja wyglada tak samo jak zamienie kolejnosc obslugi tych warningow.. tzn. jesli w pierwszym if bedzie obsluga niepoprawnego zapytania to bedzie mi sie pojawiac caly czas (tzn i przy wylaczonym serwerze i niepoprawnym zapytaniu) 'niepoprawne zapytanie'.
podejrzewam ze blad jest moze w mojej konstrukcji if-elseif..
ma ktos moze pomysl?
pzdr!

jakby ktos kiedys mial podobny problem i chcial skorzystac z tego skryptu to dodam ze w if-ach przy $errstr trzeba dac operator porownania, nie przypisania.. czyli:
  1. <?php
  2. if($errstr=='pg_query() [function.pg-query]: Query failed: error!')
  3. ?>

i wsjo.. winksmiley.jpg
ale dziala to przy komunikatach nie zawierajacych tych glupich lacznikow typu: [function.pg-cos]..
wlasnie, moze ktos wie jak wylaczyc pokazywanie sie tych lacznikow w warningach?
bo ten przykladowy warning wyglada w rzeczywistosci:
pg_query() [<a href='function.pg-query'>function.pg-query</a>]: Query failed: error! " title="Zobacz w manualu PHP" target="_manual
da sie w jakims php.ini czy gdzies ustawic by nie bylo tej czesci : [<a href='function.pg-query'>function.pg-query</a>] ?
pzdr!
Kicok
O wiele łatwiej ci będzie napisać prostą klasę do obsługi bazy danych lub po prostu zrobić nakładki na funkcje w takiej postaci:
  1. <?php
  2.  
  3. function error($error_msg)
  4. {
  5. // Prosta funkcja do obsługi błędów
  6. die($error_msg);
  7. }
  8.  
  9.  
  10. function my_pg_connect($connect_str)
  11. {
  12. $conn_id = pg_connect($connect_str);
  13. if(!is_resource($conn_id)) {
  14. error('brak polaczenia z hostem');
  15. }
  16.  
  17. return($conn_id);
  18. }
  19.  
  20. function my_pg_query($query)
  21. {
  22. global $conn_id;
  23.  
  24. $result = pg_query($conn_id, $query);
  25. if(!$result) {
  26. error('niepoprawne zapytanie');
  27. }
  28.  
  29. return($result);
  30. }
  31.  
  32.  
  33.  
  34. $conn_id = my_pg_connect('host=sheep port=5432 dbname=mary user=lamb password=foo');
  35. my_pg_query('SELECT * FROM table');
  36.  
  37. ?>


Jeśli potrzebujesz więcej informacji o błędzie, to zainteresuj się funkcją: debug_backtrace" title="Zobacz w manualu PHP" target="_manual. Myślę, że dla prostych skryptów PHP ta metoda jest wystarczająca.
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.