Jak rozwiązać błąd krytyczny PHP: wyczerpany dozwolony rozmiar pamięci 8388608 bajtów

Jeden z najczęstszych i frustrujących błędównapotkany przez programistów PHP brzmi: „Błąd krytyczny: wyczerpany dozwolony rozmiar pamięci 8388608 bajtów…”, a po nim coś w rodzaju „(próbował przydzielić XXXX bajtów) w /home/www/file.module w linii 12.” Ten fatalny błąd PHP przycina ponieważ domyślnie PHP ma limit użycia pamięci 8 MB dla każdego skryptu. W rzeczywistości jest to dobra rzecz, ponieważ nie chcesz, aby nieuczciwy skrypt PHP zniszczył twój serwer, zajmując całą pamięć. Ale czasami będziesz mieć skrypt PHP, który zwykle przekracza limit 8 MB (powiedzmy, do importowania lub przesyłania). Aby obejść komunikat o błędzie „Błąd krytyczny: dozwolona wielkość pamięci 8388608 bajtów wyczerpana…”, po prostu wstaw ten wiersz kodu do skryptu u góry:

ini_set („memory_limit”, ”16 mln„);

limit_pamięci

Spowoduje to ustawienie limitu pamięci na 16 MBniż 8 MB. Możesz i powinieneś majstrować przy tym numerze, aby był jak najniższy bez powtarzania tego komunikatu o błędzie. Spowoduje to jedynie zmianę limitu pamięci dla tego konkretnego pliku PHP.

Alternatywnie możesz zmienić plik php.ini, aby zwiększyć limit pamięci. Wpłynie to na wszystkie skrypty na twoim serwerze. Po prostu otwórz php.ini i znajdź wiersz o treści „memory_limit” i zmień go:

limit_pamięci = 16 M.

Błąd krytyczny: wyczerpany dozwolony rozmiar pamięci 134217728

Zauważyłem we własnym PHP.plik ini, że mój domyślny jest znacznie wyższy przy 128M. Tak więc, jeśli kiedykolwiek otrzymam ten komunikat o błędzie, brzmi on: „Błąd krytyczny: wyczerpany dozwolony rozmiar pamięci 134217728 bajtów…” i oczywiście jest to znacznie większy problem. Ale ma to samo obejście jak „Błąd krytyczny: wyczerpany dozwolony rozmiar pamięci 8388608 bajtów…” lub „Błąd krytyczny: wyczerpany dozwolony rozmiar pamięci 16777216 bajtów…” lub cokolwiek innego. Najwyraźniej domyślna wartość memory_limit została zwiększona z 8M do 16M w PHP 5.2.0, a teraz wynosi 128M dla PHP 5.3.0, co wyjaśnia, dlaczego w ogóle nie pojawia się ten komunikat o błędzie.

Możesz także wyłączyć limit pamięci, ustawiając memory_limit na –1 w PHP.ini.

limit_pamięci = -1

Jednak z oczywistych powodów nie jest to zwykle dobry pomysł.

Uwaga: Możesz również użyć wiersza memory_limit na stronie .htaccess.

Pamiętajcie, że to tylko obejście. Naprawdę, twój skrypt PHP powinien nie przekraczać 8 MB, chyba że przesyłane pliki lubrobienie czegoś innego, co oczywiście zajmuje dużo pamięci. Naprawdę powinieneś spróbować dowiedzieć się, dlaczego twój skrypt zużywa tak dużo pamięci i spróbować go naprawić. Jednym ze sposobów sprawdzenia, ile pamięci zajmuje skrypt PHP, jest użycie funkcji PHP memory_get_usage (). Po prostu powtórz to w dowolnym momencie skryptu, aby dowiedzieć się, gdzie gwałtownie wzrasta użycie pamięci:

echo memory_get_usage ();

Jeśli pojawia się ten komunikat o błędzie w Drupal lub Joomla, prawdopodobnym winowajcą jest nowy moduł lub pakiet. Na przykład w Drupal strona admin / moduły ładuje się każdy moduł w instalacji Drupala, który można uzyskaćwłochaty, jeśli moduł niestandardowy jest wadliwy, uszkodzony lub zhakowany. Spróbuj wyłączać moduły jeden po drugim, aby zidentyfikować, który sprowadza imprezę. Ponadto niektórzy dostawcy hostingu zignorują twoje próby modyfikacji limitów pamięci dla kodu PHP, więc może być konieczne skontaktowanie się z obsługą hostingową w celu uzyskania pomocy. Czasami zdarza mi się, że muszę edytować plik php.ini, a czasem umieszczam kod w pliku .htaccess. Tak czy inaczej, mam nadzieję, że te informacje tutaj wystarczą, aby zabrać Cię w drogę!

0

Podobne artykuły

zostaw komentarz