Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> błąd przydzielania pamieci dla skryptu, Allowed memory size of 134217728 bytes exhausted tried to allocate 71
DK.log
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

Ostrzeżenie: (0%)
-----


Witam.

Pierwszy raz spotakłem się z czyms takim.

W skrypcie PHP w momencie próby zbudowania zmiennej tablicowej w pętli, wywala błąd o przydziale pamięci.
Cytat
Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in /var/www/html/index.php on line 33


Zresztą sami spójrzcie:
  1. $ap = array ('V1', 'V2', 'JM1', 'JM2' );
  2.  
  3. for ($i=(count($ap)+1); $i<(count($ap)+15); $i++)
  4. {
  5. $ap[$i]="GM $i"; //to jest właśnie linia 33
  6. }

Jak widać w momencie wystapienia błedu skrypt próbuje dopisac do zmiennej tablicowej $ap (zawierającej aktualnie 4 rekordy) koloejne 15 rekordów. Nie sadze, żeby 19 rekordów przekraczało 134217728 bajtów (czyli 128 MB), zresztą po zmianie w php.ini
Kod
memory_limit = 128M
na
Kod
memory_limit = 512M
wyskakuje identyczny błąd (zmienia się tylko ilość dozwolonej pamięci zmienia się na 536870912).

Włączenie obsługi długich tablic
Kod
register_long_arrays = On
też nie pomaga - zresztą 19 rekordów to nie jest długa tablica.

Jestem prawie pewien, ze to kwestia konfiguracji apach'a, ale nie mam pomysłu co konkretnie mogłoby to powodować.

A może coś z uprawnieniami do katalogu/plików?

Jesli ktos ma jakis pomysł to bardzo prosze pomoc / podpowieedź.

Z góry dzięki.

Pozdrawiam

Ten post edytował DK.log 19.10.2010, 22:27:45
Go to the top of the page
+Quote Post
Fifi209
post
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


A skąd się zabrała tam tablica: $apartments i jakie przyjęła wartości?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
-=Peter=-
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 51
Dołączył: 4.02.2005
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Wydaje mi się, że w pętli modyfikujesz (zwiększasz) tablicę apartments, a to że za każdym razem wywoływany jest count($apartments) powoduje że pętla wykonuje się masakryczną liczbę razy do momentu aż pamięci brakuje. Wyciągnij liczenie elementów tablicy $apartments przed pętle i przypisz do zmiennej, którą wstawisz w miejsca, gdzie obecnie wywołujesz funkcję count.


--------------------
Go to the top of the page
+Quote Post
Pilsener
post
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


I nie przechowujemy dużej liczby danych w pamięci, używamy plików lub bazy.
Go to the top of the page
+Quote Post
DK.log
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

Ostrzeżenie: (0%)
-----


Cytat(fifi209 @ 19.10.2010, 20:21:03 ) *
A skąd się zabrała tam tablica: $apartments i jakie przyjęła wartości?

Tablica $apartments miała być tablicą $ap - przepraszam za pomyłke. Już wyedytowałem pierwszy post.

Cytat(-=Peter=- @ 19.10.2010, 20:28:32 ) *
Wydaje mi się, że w pętli modyfikujesz (zwiększasz) tablicę apartments, a to że za każdym razem wywoływany jest count($apartments) powoduje że pętla wykonuje się masakryczną liczbę razy do momentu aż pamięci brakuje. Wyciągnij liczenie elementów tablicy $apartments przed pętle i przypisz do zmiennej, którą wstawisz w miejsca, gdzie obecnie wywołujesz funkcję count.


-=Peter=- miałes rację.

Wystarczyła prosta zmiana.
  1. $ap = array ('V1', 'V2', 'JM1', 'JM2' );
  2. $k=count($ap);
  3. for ($i=($k+1); $i<($k+15); $i++)
  4. {
  5. $ap[$i]="GM $i"; //to jest właśnie linia 33
  6. }


Dzięki.


Cytat(Pilsener @ 19.10.2010, 22:36:16 ) *
I nie przechowujemy dużej liczby danych w pamięci, używamy plików lub bazy.


Pilsener, zgadzam sie z tobą. Zwróć jednak uwage, że z załozenia "moja" ilośc danych to miało byc 34 rekordy. Przez moją pomyłke w definicji petli for danych zrobiło się o wiele więcej.

W kazdym razem dziękuje wszytskim za zainteresowanie tematem.
Poniewaz problem został rozwiazany przez -=Peter=-'a, mozemy śmiało zamykac ten temat.

Pozdrawiam.


Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 03:55