2011-06-11 10 views
5

Ten błąd występuje, gdy użytkownicy przesyłają obrazy do mojej witryny.PHP Błąd krytyczny: brak pamięci (przydzielono 80740352) (próbowano przydzielić 12352 bajtów) w

błąd msg to "Błąd krytyczny PHP: brak pamięci (przydzielono 80740352) (próbowano przydzielić 12352 bajtów) w/home ......." Jak mogę to naprawić, używając php.ini?

Oto moje aktualne ustawienia przesyłania php.ini

upload_max_filesize = 2000M ; 
post_max_size = 2000M 
max_file_uploads = 8 

jakieś pomysły, co jeszcze muszę dodać, aby rozwiązać ten problem?

+1

Twój skrypt pochłania zbyt dużo pamięci, niezależnie od tego, co robi, a nie samego pliku! – deceze

+0

możliwy duplikat [Jak rozwiązywać problemy z php "Brak pamięci"?] (Http://stackoverflow.com/questions/6114155/how-do-you-debug-php-out-of-memory-issues) – Gordon

Odpowiedz

8

Optymalna wartość memory_limit zależy co robisz z przesłanych plików. Czy czytasz pliki w pamięci przy użyciu file_get_contents lub biblioteki GD? W takim przypadku zwiększ wartość memory_limit co najmniej tak samo, jak upload_max_filesize, najlepiej więcej.

Jeśli używasz GD, pamiętaj, że GD zatrzymuje cały obraz w pamięci bez kompresji. Oznacza to, że zajmuje ona pamięć w zakresie od width * height * bit-depth, np. 1024*768*32 = 25 165 824 bits = 3 MB dla zrzutu ekranu, lub nawet 55 MB dla obrazu 14 megapikseli.

Niektóre operacje mogą wymagać utworzenia kopii obrazu, dlatego należy rozważyć ustawienie parametru memory_limit w podwójnej ilości potrzebnej do zachowania obrazu w pamięci. Upewnij się także, że nie załadujesz wszystkich zdjęć do pamięci naraz, jeśli nie musisz. Możesz zwolnić pamięć używaną przez GD, wywołując imagedestroy na uchwycie po zakończeniu pracy z obrazem.

2

Podnieś swój limit pamięci z php.ini

memory_limit = ... 
+0

Wszelkie sugestie na temat wartości, jeśli użytkownik ma przesłać 6 obrazów 1 MB na raz? – daza166

+0

Domyślne ustawienie to 128 Mb i nie sądzę, że spowoduje to problemy, ale może trzeba spróbować. Spróbuj przesłać 6 obrazów o wielkości 2 MB, a następnie zwiększ wartość, dopóki nie uzyskasz żadnych błędów. Upewnij się także, że użytkownicy nie przesyłają obrazów RAW, które mogą przekroczyć 10 MB. Zalecam zmniejszenie maksymalnego rozmiaru wysyłania. –

0

Przesyłane pliki są zapisywane w pamięci, więc należy również zwiększyć ilość pamięci co najmniej o tyle, ile oczekiwano.

memory_limit = 2000M // better 2200M or above, just in case. 
7
set_time_limit(0); 
ini_set('memory_limit', '20000M'); 

Do początku skryptu. Zmień odpowiednio 20000M.

Powiązane problemy