Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Informacja o błędzie w skrypcie.
Forum PHP.pl > Forum > PHP
kukix
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.
darko
Jest możliwe
kukix
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.
darko
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.
phpion
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.
kukix
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?
phpion
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
nospor
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.
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.