![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witajcie,
nie do końca wiem jak w PHP narazić się na wyciek pamięci, ale chyba właśnie padłem jego ofiarą. Mam skrypt konsolowy, który czyta po kolei strony z zewnętrznego serwera i zawsze po około 40-50-ciu tysiącach iteracji otrzymuję błąd w stylu: Cytat PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 421888 bytes) in ... on line 36 A to mój kod (uprościłem dla przykładu):
Linia 36. to: Czy po kroku iteracji zawartość $html dalej jest trzymana w pamięci? Jakoś nie chce mi się w to wierzyć. Ten post edytował SmokAnalog 4.02.2018, 13:09:52 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 707 Pomógł: 266 Dołączył: 3.07.2012 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
@phpion Jestem pewien. Jedna strona nie ma 512 MB. Rozumiem, że podważasz zdanie kolegów wyżej?
@darko Nie wiem czy PHP się aż tak różni, żeby uniemożliwiać użycie pętli idących w tysiące iteracji. Zalicza się go jednak do języków ogólnego przeznaczenia. Świat PHP nie kończy się na requestach i response'ach. @trueblue Muszę właśnie zrobić taki test. Zmienię limit pamięci na malutki, np. 1 MB, dam unset i zobaczę. Do głowy przychodzi mi jeszcze jedna możliwość. Używam w tej pętli kilka razy preg_match z trzecim argumentem, na przykład: Może ten trzeci argument, podawany w końcu jako referencja, powoduje wyciek? Tak naprawdę nie jest powiedziane, że to właśnie zmienna $html wyciekła. To ona spowodowała przekroczenie limitu, ale być może zapchało go coś innego? Tylko że poza preg_match, zapytaniami do bazy i echo nic tam innego nie ma, a bez echo też występuje ten błąd. Ten post edytował SmokAnalog 4.02.2018, 17:04:17 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 11:43 |