Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Obsługa błędów
Forum PHP.pl > Forum > Przedszkole
Narzew
Witam

Piszę sobie prostą obsługę błędów w PHP i mam pytanie, wykorzystuje sobie przykładowo taki skrypt

  1. <?php
  2.  
  3. class {
  4. public static function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) {
  5. echo $errstr;
  6. }
  7.  
  8. set_error_handler(array('Error', "errorHandler"));
  9.  
  10. echo 1;
  11. trigger_error("Cannot divide by zero", E_USER_ERROR);
  12. echo 2;


Mam pytanie, mianowicie czy da się zrobić taki system obsługi błędów który by najpierw sprawdzał czy są jakieś błędy i je wyświetlał tak że np. nie wyświetlało mi "1" w skrypcie oraz "2". Nie chodzi mi o zrobienie diva który 1,2 zasłoni tylko system który sprawdzi najpierw.

Pozdrawiam i dziękuję za odpowiedzi
nospor
Najpierw realizuje się logike a dopiero potem wygląd. Przy takim podejściu zawsze zanim cokolwiek wyświetlisz, masz już przeprowadzone wszelkie obliczenia/komendy/itp i możesz odpowiednio reagować na to.
Narzew
No tak ale jak korzystam np z MVC i wyświetlam Widok i w nim jest jakiś błąd (choćby to dzielenie przez 0) to wtedy wyświetli mi zawartość pliku do błędu
nospor
Jakim cudem w widoku ty masz dzielenie przez 0? Widok służy do wyswietlania informacji a nie wykonywania działań.
Narzew
Dzielenie przez zero to przykładowy błąd, wiem że służy tylko do wyświetlania danych ale przykładowo chciałbym sobie zrobić tabele, użyje foreach i coś źle napiszę i będzie nie tak.
nospor
No i wówczas dodstaniesz błąd. No i w czym problem, bo nadal nie rozumiem.
Narzew
Dostane błąd + do tego co zdąży się wykonać a ja chce aby PHP sprawdzić wcześniej czy jest tam błąd i jeśli jest to wyświetlił go przed wyświetleniem pełnego widoku
Szymciosek
Czyli chcesz najpierw przeanalizować cały View pod kątem błędów, a dopiero w przypadku, gdy błędów nie ma to wyświetlić?
Narzew
Znaczy nie koniecznie tylko widok, chodzi mi wyłapanie błędów przed wyświetleniem widoku itp
nospor
1) A co ci ten błąd w tym view przeszkadza? Błędy w view na dobrą sprawę powinienieneś mieć tylko i wyłącznie na etapie tworzenia aplikacji. Jeśli masz później, znaczy że masz źle napisaną aplikację

2) Od biedy najpierw wykonuj raz view, wynik pamiętać w zmiennej, i dopiero gdy nie ma błędów - wyświetlaj ten view ze zmiennej
Narzew
Nie przeszkadza tylko chce sobie stworzyć wygodne narzędzie do tworzenia aplikacji, o MVC ja pisałem tylko przykładowo. Po prostu chce aby skrypt przed uruchomieniem i wyświetlaniem czegokolwiek wyłapał błędy i tyle. Nic więcej nie potrzebuje
Crozin
@nospor: Widok to nie tylko wyświetlanie danych, ale nawet przy tym jednym zadaniu jest sporo miejsca błędy. Każdemu może zdarzyć się nie wyłapanie czegoś na etapie tworzenia aplikacji, więc podejście @Narzew by stworzyć mechanizm kontrolujący to jest jak najbardziej słuszne. W końcu obsługa błędów to absolutna podstawa, a wyświetlenie błędu w przeglądarce rozwalające pół strony na serwerze produkcyjnym to żadna obsługa błędów.

@Narzew: Rozwiązanie jest bardzo proste: skorzystaj z buforowania (ob_start, ob_get_clean i pokrewne).
nospor
@Crozin z całym szacunkiem, ale nie wyobrażam sobie jak na etapie tworzenia aplikacji nie można wyłapać błędów w widoku.

Cytat
Rozwiązanie jest bardzo proste: skorzystaj z buforowania (ob_start, ob_get_clean i pokrewne).
Dlatego napisałem, by najpierw zapamiętywał widok do zmiennej. Każde lepsze MVC to udostępnie właśnie na zasadzie ob_.....

Wracając do tematu:
twoja funkcja nie może wyglądać tak:
public static function errorHandler($errno, $errstr, $errfile, $errline, $errcontext) {

echo $errstr;

}


Bo nic dziwnego ze ci rozwala wyglad jak wali echo gdzie popadnie. Nie możesz tak robić. Błędy masz zapamiętywać w tablicy, a następnie w widodu masz mieć kawałek kodu, który będzie błędy z tej tablicy wyświetlał tam gdzie Ty chcesz, a nie gdzie popadnie.


@edit: @Crozin oczywiście masz rację. Za bardzo skupiłem się na pewnych błędach, zapominając o innych, które zawsze mogą wystąpić smile.gif
Tak czy siak, system błędów autora należy poprawić conajmniej do wersji, którą proponuję, gdyż w przeciwnym wypadku żadne ob_ nie pomogą, skoro błędy i tak będą lecieć na ekran gdzie popadnie.
Narzew
@Crozin Dzięki bardzo, korzystałem kiedyś z tego ale kompletnie wyleciało mi to z głowy, wielkie dzięki

@nospor Kod podawałem PRZYKŁADOWO, jakoś nie wyobrażam sobie implementacja jego w środowisku produkcyjnym.

Cytat
Bo nic dziwnego ze ci rozwala wyglad jak wali echo gdzie popadnie. Nie możesz tak robić. Błędy masz zapamiętywać w tablicy, a następnie w widodu masz mieć kawałek kodu, który będzie błędy z tej tablicy wyświetlał tam gdzie Ty chcesz, a nie gdzie popadnie.


Ehh chce zrobić obsługę błędów które występują w skrypcie (E_WARNING, E_NOTICE) a nie informacje że użytkownik zostawił puste pole które jest wymagane, dawałem echo gdzie popadnie ponieważ chciałem tylko pokazać kod jak najprostszy.
Powtarzam jeszcze raz, kod który podawałem był przykładowy
Po prostu chce aby przy tworzeniu aplikacji wyskoczyło mi okienko co gdzie jest nie tak a nie pół strony i okienko.
@nospor nie traktuj wszystkich z góry jako nie znających się przepisywaczy

Dzięki za pomoc!

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.