Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obsługa błędów
Malinaa
post 23.02.2011, 13:54:20
Post #1





Grupa: Zarejestrowani
Postów: 542
Pomógł: 6
Dołączył: 21.07.2008

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


Witam,
mam taką funkcje do obsługi błędów.

Chciałbym ją usprawnić, poprawić błędy jeśli są, dodać obsługe błędów zapytań,
obsługe tych będów o których nie wiem.

  1. // OBSLUGA BLEDOW
  2. set_error_handler('ErrorHandler');
  3. // date_default_timezone_set('Europe/Warsaw'); Cos nie tak z funkcja na serwerze ?
  4.  
  5. // Prosty handler do logowania bledow
  6. function ErrorHandler($errLevel, $errMessage, $errFile, $errLine) {
  7. global $path;
  8. $data = date('Y-m-d H:i:s');
  9. $file = date("Ymd").'_'.basename($_SERVER['PHP_SELF'],".php").'.log';
  10. $file_path = $path.'logs/'.$file;
  11.  
  12. $msg = "Czas: $data\r\n Plik: $errFile\r\n Linia: $errLine\r\n Poziom: $errLevel\r\n $errMessage\r\n";
  13.  
  14. $log = fopen($file_path, 'a');
  15. fwrite($log, $msg);
  16. fclose($log);
  17.  
  18. return true;
  19. }


Pytania:
- Dlaczego na localhost muszę dodać funkcje date_default_timezone_set(), aby ErrorHandler() działał bez błędów, a na serwerze ta funkcja nie działa, ale całość działa dobrze bez tej funkcji?
- Jak dodać obsługę błędów zapytań?
Czy trzeba tutaj, przy każdym zapytanie dodać np. trigger_error(mysql_error()); , czy można prościej w inny sposób.
- Czy o czymś nie wiem i nie uwzględniłem w obsłudze błędów i zapisaniu logów błędu w pliku.

Chciałbym prosić o więcej informacji na ten temat.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
Smertius
post 23.02.2011, 13:58:25
Post #2





Grupa: Zarejestrowani
Postów: 156
Pomógł: 31
Dołączył: 23.02.2009
Skąd: Sanok

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


Cytat
- Jak dodać obsługę błędów zapytań?
Czy trzeba tutaj, przy każdym zapytanie dodać np. trigger_error(mysql_error()); , czy można prościej w inny sposób.


Najprościej skorzystać z PDO i rzucać wyjątkami
Go to the top of the page
+Quote Post
Malinaa
post 23.02.2011, 14:10:16
Post #3





Grupa: Zarejestrowani
Postów: 542
Pomógł: 6
Dołączył: 21.07.2008

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


Bez PDO, z samych połączeniem z bazą nie byłoby problemu,
zmiana w jednym pliku i gotowe, ale zapewne musiałbym przerobić zapytania itp. itd.,
nie nie, to nie jest najlepszy pomysł.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
cojack
post 23.02.2011, 18:46:11
Post #4





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


O Jezu, przecież to jest temat rzeka, możesz sobie zrobić fabrykę do sql'a i ładnie ją dekoratorem upięknić, później błędy możesz albo wyjątkami rzucać albo trigger_error(). Możesz też zrobić odwróconego obserwatora, w tym że będzie wiele obserwujących a tylko jeden obserwowany, no róbta co chceta. Jak masz php 5.3 to dodaj sobie : "E_ALL | E_STRICT", poza tym brakuje Ci obsługi fatal errorów. Używanie globali w takim miejscu to chyba najgłupszy pomysł. Jak się coś psuje to musi mieć to osobny interfejs, który z założenia nie może się zepsuć.

* Dlaczego na localhost muszę dodać funkcje date_default_timezone_set(), aby ErrorHandler() działał bez błędów, a na serwerze ta funkcja nie działa, ale całość działa dobrze bez tej funkcji?

Hmmmm dziwna sprawa, może sprawdź sobie pierw: date_default_timezone_get, ale pierwszy raz się spotykam z takim błędem. Bo błąd nie opisany i napisany tylko że jest błędem, nie jest błędem.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
Malinaa
post 24.02.2011, 15:45:12
Post #5





Grupa: Zarejestrowani
Postów: 542
Pomógł: 6
Dołączył: 21.07.2008

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


Funkcja date_default_timezone_set() prawdopodobnie na serwerze było PHP4 i pewnie stąd problem.

Cytat
Używanie globali w takim miejscu to chyba najgłupszy pomysł.


Chcę bez global $path; ale muszę mieć adres ścieżki w funkcji, który jest zmienny.
Plik z funkcją jest includowany i może być załadowany w każdym pliku.php i różnym katalogu:
/ - katalog główny
/katalog/
/katalog/katalog/ itd.

Jak mogę inaczej podać zmienną scieżkę to pliku w tym przypadu jeśli pliki z logami znajdują się w katalogu:
/logs/

Wcześniej miałem tak, bez głupstw typu global $path; :
$file_path = dirname($_SERVER['SCRIPT_FILENAME']).'/logs/'.$file;
ale działało dobrze tylko dla katalogu głównego.


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
KKH
post 24.02.2011, 16:51:54
Post #6





Grupa: Zarejestrowani
Postów: 2
Pomógł: 1
Dołączył: 11.02.2011

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


Cytat(Malinaa @ 23.02.2011, 13:54:20 ) *
- Dlaczego na localhost muszę dodać funkcje date_default_timezone_set(), aby ErrorHandler() działał bez błędów, a na serwerze ta funkcja nie działa, ale całość działa dobrze bez tej funkcji?


To kwestia działania funkcji date(). Poczytaj jej opis w manualu, a zobaczysz, że w jednym miejscu może ona działać bez date_default_timezone_set(), a w innym nie.

PS. pojęcia localhost, "u mnie" i "na serwerze" są zupełnie nieścisłe. Podawaj raczej konfiguracje środowisk.
Go to the top of the page
+Quote Post
cojack
post 28.02.2011, 09:32:28
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


@Malina:

jeżeli wiesz że ten skrypt jest w katalogu:

/var/www/TwojaStrona/publich_html/jakis_katalog/obsluga_bledow.php

a bledy zapisujesz w:

/var/www/TwojaStrona/publich_html/bledy/errors.txt

to przeciez możesz zrobić tak:

  1. $path = dirname(__FILE__).'/../';

i też Ci będzie działać wink.gif

Ten post edytował cojack 28.02.2011, 09:33:01


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
Malinaa
post 28.02.2011, 10:47:54
Post #8





Grupa: Zarejestrowani
Postów: 542
Pomógł: 6
Dołączył: 21.07.2008

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


No tak,
ale skąd mogłem to wiedzieć smile.gif

Używałem kiedyś tego typu ściezki,
tzn. $path = dirname(__FILE__).'/';
ale wciąż nurtowała mnie taka nie spójność
zależnie od serwera (systemu)
ścieżka miała postać
- /home/serwer/public_html/pliki/errors.log // OK
ale np. na localhost - C:\Program Files\serwer\html/pliki/errors.log // znak slasha i backslesha w ścieżce

Napisałem więc funkcje która rozpoznaje ścieżkę względną ($path = './','../','../../' itd.) zamiast jak wyżej bezwzględnej $path = dirname(__FILE__).'/'; i problem rozwiązany, ale w tym przypadku globals $path nie jest najlepszym rozwiązaniem może więc skorzystam z Twojego, ponieważ działa bez problemu tylko ta nie spójność slash i backslesh w jednej ścieżce?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post
cojack
post 28.02.2011, 10:57:54
Post #9





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


So you can use the const DIRECTORY_SEPARATOR if you have diferents os on direct server and localhost to work it properly.


--------------------
cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena
Go to the top of the page
+Quote Post
Malinaa
post 22.03.2011, 13:14:32
Post #10





Grupa: Zarejestrowani
Postów: 542
Pomógł: 6
Dołączył: 21.07.2008

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


jeżeli dobrze rozumię
wystarczy zrobić tak: $fpath = dirname(__FILE__).DIRECTORY_SEPARATOR; // zaleznie od systemu moze byc slash lub backslesh
i ten problem też będzie rozwiązany.

Cytat
poza tym brakuje Ci obsługi fatal errorów

Można wiedzieć coś więcej jak taką obsługę fatal errorów dobrze zrobić.
Czy są gdzieś dostępne przykłady?


--------------------
I welcome you on the Internet >>> Design by Malina
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 4.06.2024 - 13:35