Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Limit zasobów przekroczony?
Forum PHP.pl > Forum > PHP
kiler129
Witajcie!
Mam nietypowy problem z php smile.gif
Napisałem kod który porównuje 2 katalogi i wyciąga różnie pakując w diff-paczke. Problem polega na tym, że przy małych ilościach danych działa poprawnie, przy dużych się wysypuje z dość ciekawym błędem:
Kod
Fatal error: Maximum execution time of 0 seconds exceeded in /root/_PACKER-TESTER/core/diff.class.php on line 67

Linia 67 to wbudowana w php funkcja in_array() [if(in_array($path, $oldTree["files"]))], wydaje mi się, że przekraczam ilość CPU bo użycie pamięci jest na poziomie 2-3MB.

Czy to bug czy ja coś źle robię? smile.gif

Log:
Kod
ne0:~/_PACKER-TESTER# php create.php

Warning: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0
Starting build compare
Creating tree of ./TEST/linux-2.6.35.9
Creating tree of ./TEST/linux-2.6.38-rc3
Searching for added or changed files
Progress: 28639/35866            
Fatal error: Maximum execution time of 0 seconds exceeded in /root/_PACKER-TESTER/core/diff.class.php on line 67
darko
Zwiększ przydział pamięci dla skryptu ustawiając jakąś sensowną*) wartość:
  1. ini_set('memory_limit', '32M');


*) 32 niekoniecznie jest sensowną wartością
kiler129
To też odpada, próbowałem. W sumie i tak w pamięci nie mam dużo danych, podczas liczenia jest to tablica z listą 32 tys plików która nie zajmuje dużo, podczas pakowania dodatkowo php musi pamiętać 2 chunki danych po max 20KB.
darko
To spróbuj przez .htaccess, jeśli tak nie działa, musisz zwiększyć tę wartość, innego wyjścia z tej sytuacji nie ma (oprócz optymalizacji samego skryptu php).
kiler129
Program odpalam z konsoli więc to nie to smile.gif
Optymalizować też się za bardzo nie da bo najwięcej czasu zajmuje in_array() szukający ścieżki w tablicy ścieżek (zapisane jako stringi).

Problem jednak rozwiązałem. Okazuje się, że bug występuje w PHP kompilowanym z obsługą litespeed (lsapi), wtedy php czyta dodatkowo zmienną środowiskową LSAPI_MAX_PROCESS_TIME która domyślnie ma wartość 300 sekund rzeczywistych (nie cpu).
Wystarczy odpalić z binarki CLI i problem znika lub ustawić LSAPI_MAX_PROCESS_TIME na większą wartość.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.