konto usunięte

Temat: Przechwytywanie Fatal error-ów

Witam,


Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 4864 bytes) in ...


Czy jest jakiś sposób przechwycenie błędów tego typu i wyświetlenie użytkownikowi ładnego komunikatu?

Temat: Przechwytywanie Fatal error-ów

Nie ma. Fatal errorów się nie da. Ostatnio do PHP wprowadzono catchable fatal errors. To są wybrane fatal errory, które nie są krytyczne i da się je przechwycić. Koniec pamięci do nich nie należy.
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: Przechwytywanie Fatal error-ów

Witam

do przekroczenia czasu można użyć:

ob_start('scriptTimeout');

// set to 1 this should show the error below set to 2 and above you
should get the normal output!!
set_time_limit(1);

function scriptTimeout($buffer)
{
if (eregi('Maximum execution', $buffer))
{
$buffer = 'Server Overloaded!!';
}

return $buffer;
}
//....//

w funkcji scriptTimeout chyba wystarczy dodać kolejny warunek z "exhaused" i będzie pokazywało co trzeba

PS. Nie da się napisać skryptu tak, żeby zajmował mniej pamięci ?

edit:
można połączyć

register_shutdown_function

z

$error = error_get_last();

Po wykonaniu error_get_last() $error będzie tablicą zawierającą typ błędu, komunikat, plik oraz linię wystąpienia. W obsłudze błędu wystarczy sprawdzić słowa występujące w komunikacie i pokazać własny tekst.Janusz Skudrzyk edytował(a) ten post dnia 06.10.08 o godzinie 11:02

konto usunięte

Temat: Przechwytywanie Fatal error-ów

Janusz Skudrzyk:
Witam

do przekroczenia czasu można użyć:

ob_start('scriptTimeout');

// set to 1 this should show the error below set to 2 and above you
should get the normal output!!
set_time_limit(1);

function scriptTimeout($buffer)
{
if (eregi('Maximum execution', $buffer))
{
$buffer = 'Server Overloaded!!';
}

return $buffer;
}
//....//

w funkcji scriptTimeout chyba wystarczy dodać kolejny warunek z "exhaused" i będzie pokazywało co trzeba

..a czy można próbować na bieżąco monitorować zużycie pamięci przez skrypt za pomocą memory_get_usage i przerywać pętlę, jeśli użycie pamięci zbliża się do granicy?
PS. Nie da się napisać skryptu tak, żeby zajmował mniej pamięci ?

Oczywiście, że się da.. ;)
Mój problem polega na tym, że zbyt bardzo zaufałem phpDoctrine i za jego pomocą wykonuję operację na dużych zbiorach danych. Niestety pomaganie garbage collectorowi za pomocą $record->free(true) i $query->free() nie przynosi dobrych rezultatów.
Powoli najbardziej newralgiczne fragmenty kodu przepisuje w czystym PDO.
Janusz Skudrzyk

Janusz Skudrzyk Członek zarządu,
weblabs.pl

Temat: Przechwytywanie Fatal error-ów

Tej funkcji nie używałem, ale z komentarzy w manualu php wynika, że mogą być z nią problemy (będzie inna wartość zależnie od tego czy php działa jako CGI lub moduł). Prawdopodobnie wystarczy pokazywać użycie pamięci przez całe działanie skryptu. W momencie, w którym pojawi się fatal error, zapisać ostatni wynik i tej wartości później trzymać się przy wykonywaniu petli.

konto usunięte

Temat: Przechwytywanie Fatal error-ów

Nie potrafię zrozumieć jednej rzeczy. Po co pytać się na kilku forach o to samo? Przez to powstaje śmietnik w internecie. Przecież w końcu uzyskasz na każdym z for taką samą odpowiedź.

konto usunięte

Temat: Przechwytywanie Fatal error-ów

Maciej W.:
Nie potrafię zrozumieć jednej rzeczy. Po co pytać się na kilku forach o to samo? Przez to powstaje śmietnik w internecie. Przecież w końcu uzyskasz na każdym z for taką samą odpowiedź.

1/ Spytałem się tylko na dwóch forach: GL i forum.php.pl
2/ W przypadku niektórych pytań treści i czasy odpowiedzi mogą się różnić
3/ Paradoksalnie zauważyłem, że poziom dyskusji na GL jest troszeczkę większy niż na forum.php.pl ;)
4/ Nie jest powiedziane, że z forum GL i php.pl korzystają ci sami użytkownicy => 2/
5/ śmietnik w Internecie głównie tworzą bezsensowne uwagi i riposty na nie ;);)

konto usunięte

Temat: Przechwytywanie Fatal error-ów

ad. 1. Nie pierwszy raz.
ad. 5 Prawda.
Niemniej jednak szukając czegoś na google dostaje się jeden wątek powielony wiele razy z praktycznie takimi samymi odpowiedziami.

konto usunięte

Temat: Przechwytywanie Fatal error-ów

Łukasz Bandzarewicz:

..a czy można próbować na bieżąco monitorować zużycie pamięci przez skrypt za pomocą memory_get_usage i przerywać pętlę, jeśli użycie pamięci zbliża się do granicy?

http://pl2.php.net/declare

Moze ta konstrukcja Ci sie do czegos przyda.



Wyślij zaproszenie do