Marcin Lejman

Marcin Lejman Właściciel, iTrans

Temat: Nasza klasa dalej daje ciała

Przed chwilą próba otwarcia zdjęcia na naszej klasie zaowocowała następującym, niezwykle przyjaznym dla użytkownika komunikatem: :-)

Warning: require(Memcache.php) [function.require]: failed to open stream: No such file or directory in /srv/nasza-klasa.pl/global-1862/data/include/autoload.php on line 7

Fatal error: require() [function.require]: Failed opening required 'Memcache.php' (include_path='/srv/nasza-klasa.pl/global-1862/data/all') in /srv/nasza-klasa.pl/global-1862/data/include/autoload.php on line 7
Mirosław O.

Mirosław O. netBOMB.pl

Temat: Nasza klasa dalej daje ciała

O RLY? ;)
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

RLY, RLY - było jakąś chwilkę - wgrali plik na miejsce i po problemie.

Tylko że takiemu dużemu serwisowi nie wypada wyświetlać informacji o błędach wprost na ekran użytkownika. Informacje o błędach do loga, a dla użytkownika info że coś jest nie tak, ale zaraz będzie tak jak trzeba ;-)
Marcin Lejman

Marcin Lejman Właściciel, iTrans

Temat: Nasza klasa dalej daje ciała

Tylko że takiemu dużemu serwisowi nie wypada wyświetlać informacji o błędach wprost na ekran użytkownika. Informacje o błędach do loga, a dla użytkownika info że coś jest nie tak, ale zaraz będzie tak jak trzeba ;-)

No właśnie to mnie rozbawiło najbardziej - że surowy komunikat o błędzie wywalili do przeglądarki.

konto usunięte

Temat: Nasza klasa dalej daje ciała

kiedyś próbowałem zaakceptować zaproszenie i .... przy etykiecie "zaakceptowane" był dyskretny var_dump ;D. Aby było zabawniej osoba nie została dodana do moich przyjaciół oraz zaproszenie oczywiście wygasło :P
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

Maciej Włodarkiewicz:
kiedyś próbowałem zaakceptować zaproszenie i .... przy etykiecie "zaakceptowane" był dyskretny var_dump ;D. Aby było zabawniej osoba nie została dodana do moich przyjaciół oraz zaproszenie oczywiście wygasło :P

Chłopakom się nie chce trzymać oddzielnego repozytorium i testują wszystkie rozwiązania na żywym organizmie?:-)
Rafał Korszuń

Rafał Korszuń co-owner @ Kleder

Temat: Nasza klasa dalej daje ciała

istnieje też fajny błąd jak kasujesz więcej niż 5 wiadomości, przy czym przynajmniej jedna musi być zaproszeniem :)

Wyświetla informacje że nie masz uprawnień. No i ładne include warringRafał Korszuń edytował(a) ten post dnia 10.04.08 o godzinie 14:46

konto usunięte

Temat: Nasza klasa dalej daje ciała

Ostatnio jak mi coś w pracy nie wychodzi to zawsze można naszą klasę zobaczyć, inni też tak mają ;)


Obrazek


Z 10 min później:


Forbidden

You don't have permission to access /index.php/ on this server.

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
Michał Wujas edytował(a) ten post dnia 11.04.08 o godzinie 11:30

konto usunięte

Temat: Nasza klasa dalej daje ciała

Przemek S.:
Informacje o błędach do loga, a dla użytkownika info że coś jest nie tak, ale zaraz będzie tak jak trzeba ;-)

IMHO z tego typu błędami (fatal errors) może być problem. W dokumentacji funkcji set-error-handler jest napisane:

"The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called."

Więc w tym przypadku pozostaje programowe sprawdzanie, czy plik istnieje, i jeśli tak, to załadowanie go za pomocą funkcji require. Nie jesteś jednak w stanie przewidzieć wszystkich przypadków, i wtedy lepsze jest wyświetlenie błędu w przeglądarce, niż nic. Dzięki temu jesteś w ogóle w stanie się dowiedzieć, że nastąpił błąd. Jeśli coś nakłamałem, to proszę mnie skorygować :)

Co do błędów, które dają się przechwycić, to jak najbardziej na miejscu jest to, co napisałeś.
Daniel Częstki

Daniel Częstki senior php developer

Temat: Nasza klasa dalej daje ciała

eee tam. blad w przegladarce. dla wiekszosci z nas za 50-100 lat bedzie to bez znaczenia ;)
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

Tomasz Kupczyk:
Przemek S.:
Informacje o błędach do loga, a dla użytkownika info że coś jest nie tak, ale zaraz będzie tak jak trzeba ;-)

IMHO z tego typu błędami (fatal errors) może być problem. W dokumentacji funkcji set-error-handler jest napisane:

"The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called."

Więc w tym przypadku pozostaje programowe sprawdzanie, czy plik istnieje, i jeśli tak, to załadowanie go za pomocą funkcji require. Nie jesteś jednak w stanie przewidzieć wszystkich przypadków, i wtedy lepsze jest wyświetlenie błędu w przeglądarce, niż nic. Dzięki temu jesteś w ogóle w stanie się dowiedzieć, że nastąpił błąd. Jeśli coś nakłamałem, to proszę mnie skorygować :)

Co do błędów, które dają się przechwycić, to jak najbardziej na miejscu jest to, co napisałeś.


Poprawiam ;-)

MOŻESZ dowiedzieć się co jest nie tak, w php.ini:
1. display_errors = off
2. error_log => sciezka do Twojego loga

Poza tym lepiej żeby użytkownik nie wiedział gdzie i jakie pliki trzymasz.
Oprócz tego "na zewnątrz" (czyli katalog publicznie dostępny) powinien być wystawiony jedynie plik przez który przechodzą wszystkie żądania - pozostałe skrypty nie powinny dostępne z poziomu przeglądarki, bo i po co.

Podsumowując: w wersji roboczej róbta co chceta, ale na produkcji takich kwiatków to my nie hodujemy ;-)Przemek Szalko edytował(a) ten post dnia 11.04.08 o godzinie 17:20

konto usunięte

Temat: Nasza klasa dalej daje ciała

MOŻESZ dowiedzieć się co jest nie tak, w php.ini:
1. display_errors = off
2. error_log => sciezka do Twojego loga

Na pewno lepsze to niż nic. Ale co z informacją dla użytkownika?

<?php
error_reporting(0);
ini_set('error_log', 'moj_log.txt');

require 'nie_ma_takiego_pliku.php';
?>

W przypadku powyższego skryptu, użytkownik dostanie białą stronę. Jak w takim wypadku wyświetlić informację w przeglądarce, że coś poszło nie tak?
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

Zapytam retorycznie.. Jaka jest różnica między include a require?:-)

Ano taka, że require zatrzyma nam wykonywany skrypt w momencie błędu, a include nie. Mało tego include zwróci nam informację o tym czy plik został poprawnie załadowany czy też nie.

Proponuję coś takiego:

<?php

if( (include 'jakisplik.php') === false) {
die('sorka ludzie - błąd!');
}

// tutaj dalsza część skryptu
?>

Ale to stare dzieje....
Teraz własny autoloader powinien załatwić sprawę :-)

konto usunięte

Temat: Nasza klasa dalej daje ciała

Przemek Szalko:
Zapytam retorycznie.. Jaka jest różnica między include a require?:-)

Nie chodziło mi o problem z require, ale o obsługę błędów i komunikat dla użytkownika. Zamieszczony przeze mnie skrypt to tylko przykład.
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

A.. To przepraszam za nadgorliwość.

Wg manuala:
E_ERROR - Fatal run-time errors. These indicate errors that can not be recovered from, such as a memory allocation problem. Execution of the script is halted.

Skoro wykonywanie skryptu jest zakończone to niestety nie mam pomysłu na wyświetlenie informacji o błędzie użytkownikowi.
Nadal jednak utrzymuję że lepsza jest pusta strona niż informacje techniczne, które (istnieje prawdopodobieństwo) że ktoś może wykorzystać przeciwko nam.

konto usunięte

Temat: Nasza klasa dalej daje ciała

A ErrorDocument 500 w htaccesie nie rozwiązuje problemu w sensie informowanie użytkownika o problemie ?
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

A jak można wyrzucić taki błąd ze skryptu którego wykonanie zostało zatrzymane?

konto usunięte

Temat: Nasza klasa dalej daje ciała

No dobra w tym przypadku to nie zadziała ;)

A przepisanie error handlera pod siebie ?
Przemek Szalko

Przemek Szalko iOS Developer + Full
Stack Developer

Temat: Nasza klasa dalej daje ciała

Błędów E_ERROR nie obsługuje error_handler - i tu jest problem o który się rozchodzi :-)

konto usunięte

Temat: Nasza klasa dalej daje ciała

Sprawdziłem w manualu

http://pl.php.net/manual/en/function.set-error-handler...

Przetestowałem linkowanie pliku który nie istnieje i go łapie...

Następna dyskusja:

logowanie - daje dostęp do...




Wyślij zaproszenie do