Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Informacja o błędzie w skrypcie., Czy serwer może powiadomić mnie o błędzie napotkanym przez parser php?
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Witam.

W skrypcie, który zrobiłem znalazł się błąd, problem w tym, że błąd ten był tam przez dwa-trzy tygodnie zanim ktoś się o nim dowiedział i przez ten czas klient mój poniósł straty :/

Pytanie moje jest takie, czy jest możliwość, aby serwer/parse php wysłał mi informacje o błędzie wraz z komunikatem? Np "błąd w pliku XXX.php w lini xx".

Skrypt mój nie jest napisany w oparciu o klasy, wiem że w klasach jest coś takiego jak wyjątki.


Czy jest w ogóle taka możliwość?
Będę wdzięczny za wszelkie wypowiedzi.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Jest możliwe


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
kukix
post
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


dzieki wielkie za informacje.

Przeszukałem równiez powiązane strony w manualu,.
natrafiłem m.in na taki kod:

  1. <?php
  2. function myErrorHandler($errno, $errstr, $errfile, $errline) {
  3. switch ($errno) {
  4. case E_NOTICE:
  5. case E_USER_NOTICE:
  6. $errors = "Notice";
  7. break;
  8. case E_WARNING:
  9. case E_USER_WARNING:
  10. $errors = "Warning";
  11. break;
  12. case E_ERROR:
  13. case E_USER_ERROR:
  14. $errors = "Fatal Error";
  15. break;
  16. default:
  17. $errors = "Unknown";
  18. break;
  19. }
  20.  
  21. if (ini_get("display_errors"))
  22. printf ("<br />\n<b>%s</b>: %s in <b>%s</b> on line <b>%d</b><br /><br />\n", $errors, $errstr, $errfile, $errline);
  23. if (ini_get('log_errors'))
  24. error_log(sprintf("PHP %s: %s in %s on line %d", $errors, $errstr, $errfile, $errline));
  25. return true;
  26. }
  27.  
  28. // set to the user defined error handler
  29. set_error_handler("myErrorHandler");
  30. ?>


Wyczytałem, że jeżeli jest błąd w składni to parser wogole nie odpali skryptu i nie uruchomi tej funkcji i zwróci standardowy błąd np:
Cytat
<b>Parse error</b>: syntax error, unexpected ';' in <b>/alt/home/webmaster/html/index.php</b> on line <b>56</b><br />

lub

Fatal error: Call to undefined function gen_www() in /alt/home/webmaster/html/index.php on line 110


i dalej nie mam dostepu do tych błędów.

Ten post edytował kukix 26.11.2009, 15:37:52
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Może masz zapisywanie błędów w logu? Generalnie można spokojnie usunąć sprawdzanie ustawień w ini i po prostu po każdym wystąpieniu błędu próbować wysłać maila z informacją o wystąpieniu błędu.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Jest możliwość przechwycenia fatal error'ów czy nawet błędów składni. Poszukaj w sieci - ja ok. miesiąca temu znalazłem taki przykład i napisałem odpowiednią klasę. Generalnie działa to na zasadzie buforowania wyjścia i opakowywania błędów w jakiś znacznik (np. <phperror>), a następnie sparsowanie danych z bufora. Nie jest to zapewne wydajne rozwiązanie, ale wyłapiesz nim wszystko. Możesz potem (ja tak mam) zapisać wszystkie błędy do bazy danych, wysłać powiadomienia na maila czy co tam sobie wymyślisz.
Go to the top of the page
+Quote Post
kukix
post
Post #6





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Znalazłem chyba to o czym pisałeś phpion...:
  1. <?php
  2.  
  3. function error_handler($output)
  4. {
  5.  
  6. $error = error_get_last();
  7. $output = "";
  8. foreach ($error as $info => $string)
  9. $output .= "<br> {$info}: {$string}\n";
  10.  
  11. return $output;
  12.  
  13. }
  14.  
  15. ob_start('error_handler');
  16.  
  17. nieistniejaca_funkcja();//tutaj pokaze fajnie błąd
  18.  
  19. print('';//tutaj standardowy kod z php
  20.  
  21.  
  22. ?>


reasumując.. nie da się wyłapac wszystkich błędów z poziomu skryptu, bo skrypt nie zostaje odpalony jeżeli jest błąd tak więc nie może się wykonać funkcja zgłaszająca błędy.

----------------------- EDIT ----------------------
A czy nie było by możliwości poimformowania mnie, że skrypt wykrył błąd w składni typu FATAL ERROR lub inny, który zatrzymał wykonywanie skryptu?


Ten post edytował kukix 26.11.2009, 19:19:50
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(kukix @ 26.11.2009, 20:55:51 ) *
Znalazłem chyba to o czym pisałeś phpion...:

Nie, to nie to. Poszukałem i znalazłem:
http://forums.knownhost.com/showthread.php?t=1080
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Ja tak trochę z innej beczki:
może w pierwszej kolejności zajmij się poprawieniem kodu, skoro oddajesz produkcyjnie kod a on wywala FATAL_ERRORy.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 Aktualny czas: 19.08.2025 - 15:38