Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php]obsluga bledow
misty
post
Post #1





Grupa: Zarejestrowani
Postów: 366
Pomógł: 0
Dołączył: 2.01.2007

Ostrzeżenie: (0%)
-----


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.. (IMG:http://forum.php.pl/style_emoticons/default/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!
Go to the top of the page
+Quote Post
Kicok
post
Post #2





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:18