To może być że używasz do wyścigu warunku tutaj.
To w zasadzie działa na przykład wyzwalającego śmiertelna w funkcji wyłączania dla pamięci i śmiertelna dla timeout wcześniejszym wyzwalającego funkcję wyłączania:
register_shutdown_function(function() {
# consume all memory
echo "break my pain\n";
$a = ['hello'];
while($a[] = $a);
});
set_time_limit(1);
while(1) usleep(100);
To działa również w drugą stronę, najpierw wyzwalanie śmiertelnych dla pamięci, a następnie śmiertelne dla timeout w funkcji wyłączania:
register_shutdown_function(function() {
set_time_limit(1);
while(1) usleep(100);
});
ini_set('memory_limit', '1');
$a = array_fill(0, 1024, 'hello');
while($a[] = $a);
to jeszcze nie w 100% wyjaśnić, co dzieje się wewnątrz CodeIgniter jednak powiedziałbym zapytanie trwa zbyt długo, dlatego po powrocie wyzwalanie wykonanie dane także ograniczenia czasowe. Jest to nieco trudne do odtworzenia ze względu na twoją starszą wersję PHP. Jeśli teraz zajmiemy się kodem PHP, otrzymam wiadomość, że kod został sprawdzony iw której wierszu znajduję tę komendę eval (PHP 5.4). Spróbuj odtworzyć z PHP 5.4, aby uzyskać więcej informacji. Zyskasz także znaczne korzyści z ulepszeń prędkości, które zaobserwowaliśmy od PHP 5.2. Tęsknisz za dużo.
Wcześniej:
Fatal error: Maximum execution time of 300 seconds exceeded in Unknown on line 0
To pachnie błędu startowego.
To, co spowodowało twój pierwszy błąd, trudno powiedzieć, przerwałeś to. Albo masz tutaj eval'ed kod, który mógł być częściowo obsłużony przez APC, w tym samym skrypcie można zobaczyć dwa fatalne błędy.
Spróbuj jednak bez APC, jeśli możesz go odtworzyć. Jeśli nadal możesz, zgłoś to w bugtracker PHP.
Jeśli nie możesz, zgłoś problem za pomocą modułu śledzącego APC.
Edit: Tylko widząc PHP 5.2.6, być może trzeba zgłosić i naprawić własne chociaż;) - Spróbuj odtworzyć z aktualnej wersji stabilnej, a następnie PHP.
Czy jesteś pewien, że są z tego samego skryptu?A może maksymalny błąd czasu wykonania wyzwala kolejną akcję, która powoduje błąd rozmiaru pamięci (poprzez register_shutdown_function()) – periklis
Czy możesz go odtworzyć? –
@periklis: niemożliwe. max czas exec jest krytyczny i natychmiast zabija skrypt. zezwolenie na uruchomienie kodu MORE po prostu pozwoliłoby na obejście limitu. ditto dla maksymalnej pamięci. –