Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][LINUX]PHP wiesza maszynę
Forum PHP.pl > Forum > PHP
Morfi777
Hej,

mam skrypt w php który otwiera pliki kolejno 1, 2, 3 itd, jest ich 130tys. Czyta je i wyciąga z nich nazwiska.

Oczywiście dzieje się to w pętli for. Ustawiłem for 1 do 1000. Leciał i wypluwał te naziwska.

Zauważyłem, że po jakimś czasie zaczyna to robić coraz wolniej i wolniej. W końcu skończył, ale po tym maszyna strasznie muliła, czas reakcji był około 15-20 sekund, po jakimś czasie samo się unormowało. W międzyczasie sprawdzałem, CPU i MEM nie skakało, ale w logach znalazłem, ze numproc (wątków) przewyższyło o 2500(!)

Czy php nie zrzuca bufora w pętli? tylko trzyma go aż do samego końca? Co mogę zrobić żeby wymusić przy końcówce pętli zrzucenie wszystkiego co zbędne?


Dzięki!
Bags_Bunny
Pokaż kod.

Funkcja, o którą pytasz to flush, ale mam dziwne przeczucie, że to nie ma nic do rzeczy. Może np. nie zamykasz plików?

I jaki jest sens plucia tylu rekordów? Nie lepiej sobie zapisać do pliku tekstowego i go ściągnąć albo nawet do bazy danych i mieć pełną swobodę?
Morfi777
Hej,

może powinienem unsetować buffer za każdym razem?

Pokazałbym, ale jest w nim taki burdel że rzygać się chce, zmienne ponazywane a,b,c,d, tabulatory nie istnieją, breaki też rzadko

Co do plików to są one na zewnętrznym serwerze, używam do tego curl'a. TO ważne?

Schemat jest taki

od 1 to 1000, wykonuj
<instruckje curla: init, setopt, exec, close>
<filtrowanie: preg_match_all'em>
<printowanie wyników>

<dodatkowe warunki tworzące dodatkowe pętle for>

koniec (i znów od początku)


oczywiscie zrzucam to w powłoce ( ~# time php dump.php 1 1000 >> 1to1000.dump )


Dzięki!

Ok, wrzucam smile.gif

  1. <?php
  2.  
  3.  
  4. for($file = $argv[1]; $file <= $argv[2]; $file++)
  5. {
  6. $dump = curl_init ();
  7.  
  8. curl_setopt($dump, CURLOPT_RETURNTRANSFER, 1);
  9. curl_setopt($dump, CURLOPT_URL, "http://URL/file.php?p=" . $file);
  10.  
  11. $buffer = curl_exec($dump);
  12.  
  13. curl_close($dump);
  14.  
  15. $found = false;
  16. $valid = true;
  17.  
  18. if ( preg_match( '/You do not have permission to view this file/', $buffer) )
  19. $valid = false;
  20.  
  21. if ( preg_match( '/the link that brought/', $buffer) )
  22. $valid = false;
  23.  
  24. if ( empty($buffer) )
  25. $valid = false;
  26.  
  27. if( $valid )
  28. {
  29. $page = 1;
  30.  
  31. preg_match_all(_PATTERN_, $buffer, $result);
  32.  
  33. $PageCount = count($result[0]);
  34.  
  35. if($PageCount > 0)
  36. {
  37. print("file: " . $file);
  38. print(" Page: " . $page ."\n");
  39. }
  40.  
  41. for($i = 0; $i < $PageCount; $i ++)
  42. print($result[0][$i] . "\n");
  43.  
  44.  
  45. if($PageCount > 0)
  46. print("\n");
  47.  
  48.  
  49. if ( !preg_match('/Page 1 of 1/', $buffer) )
  50. do
  51. {
  52. $page++;
  53. $temp = '/Page 1 of ' . $page . '/';
  54.  
  55. if ( preg_match($temp, $buffer) )
  56. $found = true;
  57. }
  58. while(!$found);
  59.  
  60. if ($page > 1)
  61. for($var = 2; $var <= $page; $var++)
  62. {
  63.  
  64. $TempVar = $var * 10;
  65.  
  66. $dump = curl_init ();
  67.  
  68. curl_setopt($dump, CURLOPT_RETURNTRANSFER, 1);
  69. curl_setopt($dump, CURLOPT_URL, "http://URL/file.php?p=" . $file . "&q=" . $TempVar);
  70.  
  71. $buffer2 = curl_exec($dump);
  72.  
  73. curl_close($dump);
  74.  
  75.  
  76. preg_match_all(_PATTERN_, $buffer, $result);
  77. $PageCount = count($result[0]);
  78.  
  79. if($PageCount > 0)
  80. {
  81. print("file: " . $file);
  82. print(" Page: " . $var ."\n");
  83. }
  84.  
  85. for($i = 0; $i < $PageCount; $i ++)
  86. print($result[0][$i] . "\n");
  87.  
  88.  
  89. if($PageCount > 0)
  90. print("\n");
  91.  
  92. }
  93. }
  94. }
  95. ?>
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.