Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Kategorie

Kategorie

Kategoria wyżej
O autorze

O autorze

Maciej (hawk) Jarzębski
Reklama

Reklama

Phiend: Obsługa błędów i komunikatów

Tłumaczenie: Anna (A_nusia) Tołaj

Błąd w PHP, jest wieloznacznym pojęciem, dotyczy wielu rodzajów błędów, ostrzeżeń i komunikatów, które mogą być wytwarzane lub wyzwalane przez parser PHP, silnik PHP lub twój kod [za pomocą funkcji trigger_error()]. Wszystkie te komunikaty są kierowane do wbudowanej w PHP funkcji zajmującej się obsługą błędów, która, bazując na rodzaju błędu, decyduje, co z nim zrobić. Są różne typy błędów i różnią się one od siebie ważnością oraz tym, przez kogo mogą zostać uruchomione. Standardowy program obsługi błędów powtarza wszystkie rodzaje błędów na ekranie (lub raczej na wyjściu standardowym) i zostaje zakończony w wyniku działania najważniejszych błędów (E_ERROR lub podobne).

Nie jest to wystarczająco elastyczne dla Phiend'a. Dlatego też wyposażony on został we własny program obsługi błędów, który zastąpił program ogólny [dzięki funkcji set_error_handler()]. Program ten da się w znacznym stopniu konfigurować. Możesz dokładnie określić, co chcesz zrobić z poszczególnymi rodzajami błędów. Co więcej, skala możliwych akcji zwiększa się.

Program obsługi błędów

Program obsługi błędów używany przez Phiend'a, nosi nazwę _phiend_error_handler() i jest określony w ActionController.class.php . Zostaje on zainstalowany przez Phiend'a na samym początku konstruktora ActionController.

Używanie własnej funkcjonalności obsługi błędów PHP zamiast rozwiązania wbudowanego ma jedną zaletę. Funkcja trigger_error() jest szczególna, ponieważ automatycznie przekazuje programowi obsługi błędów informację, skąd wyzwolony został błąd. To z kolei umożliwia Phiend'owi poinformowanie cię, w jakim pliku oraz w której linijce pojawił się błąd. Zauważ, że nie byłby to możliwe z wbudowaną funkcją logowania błędów. Wtedy musiałbyś przekazać te parametry do każdego wywołania tej funkcji, bo inaczej zostałbyś z plikiem logowania zawierającym nie numery linijek, z których błąd został wyzwolony, ale z numerami tych linii, gdzie błąd ten jest obsługiwany.

PHP umożliwia ci określenie, jakiego typu błędy będzie obejmował program obsługi. Błędy znajdujące się poza zasięgiem jego działania zostaną pominięte/skasowane. Phiend wspomaga to za pomocą funkcji error-reporting. Opcję tę można znaleźć w sekcji błędów w pliku konfiguracyjnym.

Przetwarzanie błędów i komunikatów

Program obsługi błędów używany przez Phiend'a może:

  • powtórzyć twoje błędy, to znaczy określić je użytkownikowi
  • zalogować błędy w wybranym przez ciebie pliku, aby można je było wyświetlić później
  • zapamiętać błędy w tablicy, aby można ich było użyć później, podczas tego samego żądania (jeśli, oczywiście, błąd nie zakończy twojego skryptu)
  • natychmiast zakończyć pracę

Dla każdego rodzaju błędów określonych przez PHP (poprzez rodzinę stałych E_*),Program obsługi błędów Phiend'a może zostać skonfigurowany, aby wykonać dowolnie wybraną powyższą kombinację. Jest ona zarządzana przez opcje zawarte w "sekcji błędów" pliku konfiguracyjnego.

Sterowniki logowania

Phiend może zarejestrować każdy błąd czy komunikat, który jest "dostępny" dla programu obsługi błędów. Phiend nie wymaga używania jakiegoś konkretnego pakietu logującego. Możesz wybrać dowolnie przez siebie wybrane rozwiązanie. Możesz również zdecydować się na używanie wielu rejestratorów naraz.

Aby użyć logowania w Phiend'zie, potrzebne są sterowniki logowania. Są one wyszczególnione w części "sterowniki logowania" w pliku konfiguracyjnym.

Zadaniem sterownika logowania jest upewnić się, że każda wiadomość, która ma być zarejestrowana, przesłana jest do miejsca swego przeznaczenia. Prosty sterownik, oparty na zwykłym pliku tekstowym, może napisać wiadomość bezpośrednio do jego pliku, podczas gdy sterownik bardziej złożony, w celu napisania wiadomości może wywołać wewnętrzny pakiet logujący, taki jak PEAR Log lub Log4PHP.

<?php
class VerySimpleLogDriver
{
 function VerySimpleLogDriver($params)
 {
 if (isset($params['file']))
 {
 $this->_file = $params['file'];
 }
 }

 function log($code, $message, $line, $file)
 {
 if (is_null($this->_file))
 {
 return;
 }
 $str = $file . '/' . $line . ': ' . $message . ' (' . $code . ")\n";
 $fd = fopen($this->_file, 'a');
 fwrite($fd, $str);
 fclose($fd);
 }

 var $_file = null;
}
?>

Sterownik rejestrujący musi być klasą. Klasa ta musi mieć konstruktora i jedną metodę, która przekazuje wiadomości do sterownika. Sterownik może mieć także inne metody lub zmienne, ale opisane wcześniej dwa elementy MUSZĄ być obecne.

3.1. Konstruktor

Składnia konstruktora jest następująca:

Nazwa_sterownika(array $params)

Argument $params znajduje się w tablicy asocjacyjnej zawierającej parametry sterownika logowania. Jest ona uporządkowana według nazw parametrów i zawiera wartości parametrów.

Parametry są określone w pliku konfiguracyjnym. Phiend nie precyzuje zestawu dozwolonych parametrów ani ich znaczenia. To już kwestia wyboru dewelopera danego sterownika logowania.

3.2. Metoda logowania

Sterownik rejestrujący powinien zawierać jedną metodę:

void log(int $code, , string $message, , int $line, , string $file)

Znaczenie argumentów jest następujące:

kod błędu PHP, jedna ze stały określonych jako E_*

Wiadomość, która ma być zarejestrowana

Numer linii, z której wiadomość zostaje wyzwolona

Nazwa pliku, w którym wiadomość zostaje wyzwolona

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2017 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System