Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> glob() vs. RecursiveDirectoryIterator
Athlan
post
Post #1





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


Witam. Dziś miałem pad serwisu związany z podliczaniem plików sesji w celu wyświetlenia liczby online.

Skrypt prezentował się bardzo prosto:

  1. <?php
  2. protected function _count()
  3. {
  4. $iSessions = 0;
  5.  
  6. foreach(glob(V_VAR_SESSION . '*') as $sFile)
  7. if((filemtime($sFile) + 600) > time())
  8. ++$iSessions;
  9.  
  10. return $iSessions;
  11. }
  12. ?>


Funkcję glob() zamieniłem na RecursiveDirectoryIterator osadzony (aby sprawdzał pliki rekurencyjnie) w RecursiveIteratorIterator:

  1. <?php
  2. protected function _count()
  3. {
  4. $iSessions = 0;
  5.  
  6. foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(V_VAR_SESSION)) as $oFile)
  7. if(($oFile->getMTime() + 600) > time())
  8. ++$iSessions;
  9.  
  10. return $iSessions;
  11. }
  12. ?>


Po wykonaniu
Kod
/etc/init.d/apache restart
serwer wstał (IMG:http://forum.php.pl/style_emoticons/default/blinksmiley.gif) Właściwie nie wiem dlaczego. Dość dokładnie obserwowałem dyskusję w komentarzach na php.net, ale nie znalazłem odpowiedzi.

Jeżeli ktoś ma jakieś info, proszę się wypowiadać.
Go to the top of the page
+Quote Post
revyag
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


  1. <?php
  2. foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(V_VAR_SESSION)) as $oFile)
  3. ?>


dawno nie używałem, ale to się robi raczej tak:
  1. <?php
  2. $oIt = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(V_VAR_SESSION));
  3. foreach($oIter as $oFile) {
  4. }
  5. ?>
Go to the top of the page
+Quote Post
Athlan
post
Post #3





Grupa: Developerzy
Postów: 823
Pomógł: 12
Dołączył: 18.12.2005

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


a ) Twój kod nie będzie działał, bo pomyliłeś zmienne
b ) w przypadku tej klasy, wynik z konstruktora jest zwracany, więc co za różnica
c ) mój kod działa, pytanie było inne (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
Go to the top of the page
+Quote Post
revyag
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

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


Pomyliłem zmienne bo mi się tak napisało, ale chyba wiesz że to literówka w kodzie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Różnica jest taka że tworzysz obiekt raz, a Twoim przypadku robisz to wiele razy aż będzie koniec iteracji. W pierwszej chwili myślałem że po prostu Ci się zapętla, ale jeśli tak nie jest to nie wiem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 26.08.2025 - 06:02