Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyciek pamięci
SmokAnalog
post
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):

  1. for ($id = $initialId;; $id += 1) {
  2. echo 'Trying #' . $id . ': ';
  3.  
  4. try {
  5. $html = file_get_contents('http://domena.com/page/' . $id);
  6.  
  7. // ...
  8. } catch (Exception $exception) {
  9. echo 'FAIL';
  10. }
  11. }


Linia 36. to:
  1. $html = file_get_contents('http://domena.com/page/' . $id);


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


@darko tylko co ma do tego brak warunku? Ma mielić w nieskończoność i dobrze napisany kod nie powinien doprowadzić do wycieku nawet gdy mieli przez trylion lat. Twoim tokiem rozumowania to każda pierwsza lepsza gra komputerowa powinna wywoływać wyciek.
Go to the top of the page
+Quote Post

Posty w temacie
- SmokAnalog   [PHP] Wyciek pamięci   4.02.2018, 13:09:10
- - com   PHP to język interpretowany, on przetwarza pokolei...   4.02.2018, 14:35:22
- - SmokAnalog   Dzięki, ale to chyba nie jest odpowiedź na moje py...   4.02.2018, 14:43:12
- - trzczy   Czasami ograniczenia pamięci wkurzają. Np. niezaję...   4.02.2018, 15:05:00
- - com   https://github.com/php/php-src/blob/master/...ard/...   4.02.2018, 15:07:53
- - darko   Wyciek pamięci, a wyczerpanie dozwolonego limitu z...   4.02.2018, 15:15:16
- - SmokAnalog   @darko tylko co ma do tego brak warunku? Ma mielić...   4.02.2018, 15:25:30
- - trueblue   Coś się poprawia dodając unset($html) i/lub h...   4.02.2018, 15:36:30
- - com   Ale zacznijmy od tego że PHP, nie koniecznie jest ...   4.02.2018, 16:03:15
- - darko   Nie zrozumieliśmy się. Problemy ze zwalnianiem pam...   4.02.2018, 16:10:39
- - phpion   Nie jest przypadkiem tak, że dla konkretnego adres...   4.02.2018, 16:42:02
- - SmokAnalog   @phpion Jestem pewien. Jedna strona nie ma 512 MB....   4.02.2018, 17:03:35
- - phpion   Do zmiennej $html wczytujesz ponad 500 Mb dan...   4.02.2018, 20:40:46
- - SmokAnalog   Eee, jakim cudem wczytuję do zmiennej $html 5...   4.02.2018, 20:58:58
- - markuz   memory_get_usage Po prostu sprawdź w którym momen...   4.02.2018, 21:15:21
- - SmokAnalog   Masz rację, że to nie dowód. Sam o tym napisałem p...   4.02.2018, 21:24:55
- - markuz   Nic nie myślę, po prostu to sprawdź tą funkcją    4.02.2018, 21:27:05
- - SmokAnalog   Jasne. Sprawdzę jak dotrę do domu   4.02.2018, 21:29:15
- - phpion   Mój błąd, przeczytałem ze wczytujesz więcej niż 50...   4.02.2018, 21:38:39
- - SmokAnalog   Owszem, ale na logikę: to nie znaczy, że to ta lin...   4.02.2018, 23:04:46
- - Pyton_000   Jeśli używasz PHP7 to w teorii powinno Ci samo wyw...   5.02.2018, 12:23:26
- - SmokAnalog   Wyrzuca stary, dobry warning na PHP 7.2.   5.02.2018, 12:30:49
- - com   Ciężko jest odtworzyć Twój błąd nawet z zastosowan...   5.02.2018, 18:14:06
- - markuz   [PHP] pobierz, plaintext <?php set_error_h...   5.02.2018, 22:28:49
- - SmokAnalog   Pobawiłem się trochę Twoim i moim przykładem. Wnio...   5.02.2018, 22:53:35
- - markuz   Bez wyjątków nie pobiera więcej pamięci: [PHP] po...   5.02.2018, 23:02:09
- - SmokAnalog   I to też jest bardzo ciekawa obserwacja. Masz jaki...   5.02.2018, 23:07:50
- - markuz   Nie mam pomysłów. Wrzuć link do stackoverflow jak ...   5.02.2018, 23:33:33
- - SmokAnalog   Temat już wisi. Nie będę linkował, ale podzielę si...   6.02.2018, 00:36:13
- - com   [PHP] pobierz, plaintext <?phpset_error_handler...   6.02.2018, 19:15:58
- - SmokAnalog   @com zobacz, co pisaliśmy wyżej. Bez unset też będ...   6.02.2018, 19:23:01
- - com   SmokAnalog ale unset jest na Exception, nie ma sta...   6.02.2018, 19:30:52
- - SmokAnalog   Chyba rzeczywiście jest coś w tym co mówisz, ale ź...   6.02.2018, 19:39:51
- - com   przy [PHP] pobierz, plaintext <?phpset_error_h...   6.02.2018, 19:56:49
|- - SmokAnalog   Cytat(com @ 6.02.2018, 19:56:49 ) Ten...   6.02.2018, 20:10:33
- - com   ha faktycznie ślepy jestem 2097152 > 366144 No...   6.02.2018, 20:15:45
- - SmokAnalog   Dzisiaj całą noc chodził crawlerek bez żadnej zady...   7.02.2018, 13:30:13
- - com   super ciekawe co tam crawlujesz   7.02.2018, 21:12:53
- - darko   CytatIt is because exceptions include a backtrace,...   8.02.2018, 11:30:29
- - SmokAnalog   Czy ja wiem czy takie dziwne? Zrobiłem jeszcze je...   8.02.2018, 14:48:23
- - com   Ale jest, bo nie wywołany jest destruct na starym ...   8.02.2018, 17:56:29
- - darko   Jeśli masz znaczną ilość faili, to może przed prób...   9.02.2018, 23:36:39
- - SmokAnalog   Darko, nie obraź się, ale wszystkie Twoje odpowied...   9.02.2018, 23:52:51
|- - vokiel   Cytat(SmokAnalog @ 9.02.2018, 23:52:5...   10.02.2018, 13:56:35
- - darko   To teraz Ty się nie obraź, bo już mnie lekko irytu...   10.02.2018, 02:29:44
- - SmokAnalog   No ciekawe jak przyśpieszysz w kodzie crawlera prz...   10.02.2018, 03:52:36
|- - darko   Cytat(SmokAnalog @ 10.02.2018, 03:52...   10.02.2018, 14:06:37
- - phpion   Panowie, nie ma się co tak napinać. Każdy z Was wn...   11.02.2018, 19:35:00


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

 



RSS Aktualny czas: 3.10.2025 - 06:01