2012-09-04 13 views
11

Gorąco, aby rozwiązać ten problem i dlaczego tak się dzieje?Dozwolony rozmiar pamięci wynoszący 134217728 bajtów wyczerpany

Zend Server Log:

PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 538798977 bytes) in C:\Program Files (x86)\Zend\Apache2\htdocs\test\modules\main.php on line 3

Plik main.php nie wytwarza żadnego błędu, jeśli jest wykonywane bezpośrednio z przeglądarki. Jeśli jednak użyję jego funkcji z innego pliku PHO, to Zend Log wypisze wyżej wymieniony błąd.

+0

Próbowałeś zwiększyć limit pamięci? – Jurgo

+2

128 MB używanej pamięci? Co ten skrypt * robi *? – DaveRandom

+4

Próbowałeś przydzielić 500 megabajtów pamięci RAM za jednym razem? Dobra, czy próbowałeś od razu przeczytać masowy plik CSV? Jeśli tak, przeczytaj je w jednym wierszu za każdym razem i przetwarzaj je w ten sposób. – Fluffeh

Odpowiedz

13

Zetknąłem się również z tym problemem.

Podnieś następujące zmienne tak, że wykonanie strona nie zatrzyma:

  • max_input_time
  • memory_limit
  • max_execution_time
+8

... nie technicznie * źle * więc nie -1, ale prawdopodobnie zła sugestia. Pierwotny błąd oznacza, że ​​(prawdopodobnie) używasz * sposobu * zbyt dużej ilości pamięci - w kodzie jest coś śmierdzącego (nieskończona pętla?). Innymi słowy, jeśli twoja strona zużywa tyle pamięci za każdym razem, gdy jest uruchamiana, dla twojego hosta, mam nadzieję, że nie masz wielu użytkowników :) – Ben

6

Spróbuj tego:

ini_set('memory_limit', '-1'); 

php.net/memory_limit

potrwa nieograniczone użycie pamięci serwera.

+24

to nie jest poprawny sposób rozwiązania tego rodzaju problemów. –

+2

Ale jeśli używasz trybu CLI, jest to bardzo przydatne. –

+0

@ superarts.org i inne: istnieje sposób na zmianę ustawień CLI dla PHP. Wpisz 'php --ini' i edytuj odpowiedni plik. –

10

Albo zwiększyć limit pamięci w php.ini, lub starają się optymalizować dowolne duże struktury danych (takie jak tablice) z aplikacji.

W każdym przypadku, jeśli twoja aplikacja PHP używa 128 MB pamięci RAM, coś prawdopodobnie pójdzie źle.

Ponadto, jak zauważyli Fluffeh w komentarzach, co u licha robicie, aby wykorzystać 500 MB pamięci RAM?

1

Oprócz user1427811 można monitorować time_limit i memory_limit przed i po pobraniu pliku:

function custom_put_contents($source_url='',$local_path=''){ 

    $time_limit = ini_get('max_execution_time'); 
    $memory_limit = ini_get('memory_limit'); 

    set_time_limit(0); 
    ini_set('memory_limit', '-1');  

    $remote_contents=file_get_contents($source_url); 
    $response=file_put_contents($local_path, $remote_contents); 

    set_time_limit($time_limit); 
    ini_set('memory_limit', $memory_limit); 

    return $response; 
} 
Powiązane problemy