Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] pętla foreach itp..., duże zużycie pamięci...
Kazimir
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.07.2008

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


Witam,
problem polega na tym, iż php alokuje w apachu zasoby do czasu zakonczenia pętli. W szybkim tempie przyrasta ilość zajętej pamięci. Jak można rozwiązać ten problem? Jest możliwość zwalniania zasobów po zakończeniu każdej iteracji? Czy powodem może być duża ilość zmiennych? Czy zastąpienie ich przez array() coś tu pomoże?

Dzięki za informacje (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Kazimir 2.07.2008, 00:33:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kazimir
post
Post #2





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 1.07.2008

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


kod poniżej... wychodzi na to ze zasoby nie są zwalniane :/... parsowanie 1000 stron -> 640MB pamięci... dzięki za wszelkie informacje... btw. pierwsze kroki z php :P ... także prosze o wyrozumiałość :)

  1. <?php
  2. include('./simple_html_dom.php');
  3.  
  4. $i=0;
  5. while ($i<365000) {
  6. $linki=file("./pliki/plik.$i"); 
  7.  
  8. foreach ($linki as &$value) {
  9. $link = substr($value,0,-1);
  10. $dom = file_get_dom("$link");
  11. foreach($dom->find('table[class=kodywynik] tr') as $node){
  12. $item = trim($node->find('td',0)->plaintext);
  13. $podziel = explode("r\n", $item);
  14. $miasto = substr($podziel[0],13);
  15. $gmina = substr($podziel[1],7);
  16. $powiat = substr($podziel[2],8);
  17. $wojewodztwo = substr($podziel[3],13);
  18. }
  19.  
  20. if ($miasto=="") continue;
  21.  
  22. $re = $dom->find('#wynik_g2s b', 0)->plaintext;
  23. $ok = $dom->find('#wynik_g2s b', 1)->plaintext;
  24. $ap = $dom->find('#wynik_g2s b', 2)->plaintext;
  25.  
  26.  
  27. $adresr = $dom->find('#adres', 0)->plaintext;
  28. $adreso = $dom->find('#adres', 1)->plaintext;
  29. $adresa = $dom->find('#adres', 2)->plaintext;
  30.  
  31. unset($dom);
  32.  
  33.  
  34.  
  35. $daner = explode("r\n", $adresr);
  36. unset($adresr);
  37. $ulicar = substr($daner[1],12);
  38. $kodr = substr($daner[2],16,6);
  39. if ($kodr==" ") $kodr="";
  40. $mir = substr($daner[2],38);
  41. $telr1 = substr($daner[3],18);
  42. $telr2 = substr($daner[4],18);
  43. $faxr = substr($daner[5],17);
  44. $nrkontar = substr($daner[7],19);
  45. $bankobslugujacyr = substr($daner[8],18);
  46.  
  47.  
  48. $daneo = explode("r\n", $adreso);
  49. unset($adreso);
  50. $ulicao = substr($daneo[1],12);
  51. $kodo = substr($daneo[2],16,6);
  52. $mio = substr($daneo[2],38);
  53. if ($kodo==" ") $kodo="";
  54. $telo1 = substr($daneo[3],18);
  55. $telo2 = substr($daneo[4],18);
  56. $faxo = substr($daneo[5],17);
  57. $nrkontao = substr($daneo[7],19);
  58. $bankobslugujacyo = substr($daneo[8],18);
  59.  
  60.  
  61. $danea = explode("r\n", $adresa);
  62. unset($adresa);
  63. $ulicaa = substr($danea[1],12);
  64. $koda = substr($danea[2],16,6);
  65. $mia = substr($danea[2],38);
  66. if ($koda==" ") $koda="";
  67. $tela1 = substr($danea[3],18);
  68. $tela2 = substr($danea[4],18);
  69. $faxa = substr($danea[5],17);
  70. $nrkontaa = substr($danea[7],19);
  71. $bankobslugujacya = substr($danea[8],18);
  72.  
  73.  
  74. $F = fopen("t1.csv","a");
  75. fwrite($F,"'$miasto';'$gmina';'$powiat';'$wojewodztwo';
  76. '$re';'$ulicar';'$kodr';'$mir';'$telr1';'$telr2';'$faxr';'$nrkontar';
  77. '$bankobslugujacyr'\n'$miasto';'$gmina';'$powiat';'$wojewodztwo';
  78. '$ok';'$ulicao';'$kodo';'$mio';'$telo1';'$telo2';'$faxo';'$nrkontao';
  79. '$bankobslugujacyo'\n'$miasto';'$gmina';'$powiat';'$wojewodztwo';'$ap';
  80. '$ulicaa';'$koda';'$mia';'$tela1';'$tela2';'$faxa';'$nrkontaa';'$bankobslugujacya'\n");
  81. fclose($F);
  82.  
  83. unset($link);
  84. unset($node, $item, $podziel);
  85. unset($daner, $daneo, $danea);
  86. unset($miasto, $gmina, $powiat, $wojewodztwo, $re,
  87.  $ulicar, $kodr, $mir, $telr1, $telr2, $faxr, $nrkontar, 
  88. $bankobslugujacyr, $ok, $ulicao, $kodo, $mio, $telo1, 
  89. $telo2, $faxo, $nrkontao, $bankobslugujacyo, $ap, $ulicaa,
  90.  $koda, $mia, $tela1, $tela2, $faxa, $nrkontaa, $bankobslugujacya);
  91. unset($F);
  92. }
  93. unset($value); 
  94. $i=$i+1000;
  95. }
  96.  
  97. ?>


Ten post edytował Kazimir 2.07.2008, 00:19:35
Go to the top of the page
+Quote Post

Posty w temacie


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: 22.08.2025 - 14:38