Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Obsługa błędów
Narzew
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


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

Ten post edytował Narzew 6.04.2013, 19:24:42
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




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.
Go to the top of the page
+Quote Post
Narzew
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


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
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Jakim cudem w widoku ty masz dzielenie przez 0? Widok służy do wyswietlania informacji a nie wykonywania działań.
Go to the top of the page
+Quote Post
Narzew
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




No i wówczas dodstaniesz błąd. No i w czym problem, bo nadal nie rozumiem.
Go to the top of the page
+Quote Post
Narzew
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


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
Go to the top of the page
+Quote Post
Szymciosek
post
Post #8





Grupa: Zarejestrowani
Postów: 1 168
Pomógł: 126
Dołączył: 5.02.2010
Skąd: Świdnica

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


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ć?
Go to the top of the page
+Quote Post
Narzew
post
Post #9





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


Znaczy nie koniecznie tylko widok, chodzi mi wyłapanie błędów przed wyświetleniem widoku itp
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




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
Go to the top of the page
+Quote Post
Narzew
post
Post #11





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


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
Go to the top of the page
+Quote Post
Crozin
post
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


@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).
Go to the top of the page
+Quote Post
nospor
post
Post #13





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




@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ć (IMG:style_emoticons/default/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.
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
Narzew
post
Post #14





Grupa: Zarejestrowani
Postów: 13
Pomógł: 1
Dołączył: 2.10.2012

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


@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!

Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 08:40