Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukiwanie fraz w nazwach plików na serwerze
Forum PHP.pl > Forum > Przedszkole
nowicjuszek
Witam, potrzebowałbym skrypt który kilkukrotnie sprawdzi nazwę pliku.

Mam na przykład pliki na serwerze o nazwach:

20150203_internet_aktywacja.doc
20150303_internet_blokada.doc
20150402_uprawnienia_aktywacja.doc
...

Chodzi mi najpierw o sprawdzenie czy istnieją pliki na serwerze zawierające frazę "internet", czyli w tym przypadki dwa pliki:

20150203_internet_aktywacja.doc
20150303_internet_blokada.doc

Następnie sprawdzenie który plik ma późniejszą datę w nazwie, czyli tutaj:

20150303_internet_blokada.doc

i sprawdzenie czy na przykład jest to "blokada", czy "dostęp".

Mam funkcję która wyświetla pliki na serwerze:

  1. <?php
  2. foreach(new DirectoryIterator('/home/www/strona/dokumenty/') as $file)
  3. if(!$file->isDot())
  4. echo $file->getFilename() . '<br />';
  5. ?>


Aczkolwiek nie wiem jak dalej działać na tych plikach, pobrać odpowiednie nazwy i w nich wyszukiwać konkretnych fraz.
Comandeer
glob?
Pyton_000
Litości wink.gif

Tutaj masz cały wątek http://stackoverflow.com/questions/3321547...iterator-in-php
Interesuje Cię RegexIterator
nowicjuszek
Dzięki Comandeer. Napisałem taki skrypt. Po sprawdzeniu działa, pytanie czy jest on prawidłowo skonstruowany. Nazwa plików ma taki wzorzec: data_internet_blokada/aktywacja.

  1. <?php //wyszukiwanie plików z aktywcją
  2. $pracownik = '000000';
  3. $katalog = 'pracownicy/'.$pracownik.'/';
  4. $internetakt = '*internet*aktywacja*'; //wyszukiwana fraza w nazwie pliku "aktywacja"
  5. $lista = glob($katalog.$internetakt);
  6. foreach ($lista as $akt)
  7. echo "$akt<br>"; //wyświetlnie wszystkich plików z frazą "aktywacja"
  8. $akt = substr($akt,18,8); //wyciągnięcie daty obowiązywania z nazwy pliku
  9. ?>
  10. <br />
  11. <?php //wyszukiwanie plików z blokadą
  12. $internetblok = '*internet*blokada*'; //wyszukiwana fraza w nazwie pliku "blokada"
  13. $lista = glob($katalog.$internetblok);
  14. foreach ($lista as $blok)
  15. echo "$blok<br>"; //wyświetlenie wszystkich plików z frazą "blokada"
  16. $blok = substr($blok,18,8); ///wyciągniecie daty obowiązywania z nazwy pliku
  17. ?>
  18. <br />
  19. <?php
  20. $d = substr($akt,6,2); //wyciągnięcie dnia miesiąca z nazwy pliku
  21. $m = substr($akt,4,2); //wyciągnięcie miesiąca z nazwy pliku
  22. $y = substr($akt,0,4); //wyciągnięcie roku z nazwy pliku
  23. echo $data;
  24. if ($akt > $blok) //porównanie czy data aktywacji jest wyższa od daty blokady i wyświetla poniższą informacje
  25. {echo 'pracownik ma dostęp do internetu od '.$d.'. '.$m.'. '.$y.' r.';}
  26. elseif ($blok > $akt) //porównanie czy data blokady jest wyższa od daty aktywacji i wyświetla poniższą informacje
  27. {echo 'pracownik nie ma dostępu do internetu';}
  28. ?>
Comandeer
@Pyton_000 RegexIterator - dobrze wiedzieć… biggrin.gif Jakbym nie patrzył, tak te wszystkie iteratory jakoś nie potrafią mnie do siebie przekonać. W porównaniu z nimi glob wydaje się… prymitywnie prosty wink.gif

@nowicjuszek datę można wyciągnąć jako explode('_', $nazwa, 1)[0] i osobiście bym to przekazał do DateTime, żeby mieć ładny obiekt od zarządzania datą zamiast zabawy z substr
KsaR
Cytat(Comandeer @ 7.07.2015, 15:23:43 ) *
@Pyton_000 RegexIterator - dobrze wiedzieć… biggrin.gif Jakbym nie patrzył, tak te wszystkie iteratory jakoś nie potrafią mnie do siebie przekonać. W porównaniu z nimi glob wydaje się… prymitywnie prosty wink.gif

@nowicjuszek datę można wyciągnąć jako explode('_', $nazwa, 1)[0] i osobiście bym to przekazał do DateTime, żeby mieć ładny obiekt od zarządzania datą zamiast zabawy z substr

Wszelkie iteratory sa znacznie szybsze i czasem maja lepsze funkcje tongue.gif.

Przy okazji, @nowicjuszek:
  1. # to możesz jeszcze przyszybszyć.
  2. $d = substr($akt,6,2); //wyciągnięcie dnia miesiąca z nazwy pliku
  3. $m = substr($akt,4,2); //wyciągnięcie miesiąca z nazwy pliku
  4. $y = substr($akt,0,4); //wyciągnięcie roku z nazwy pliku
  5.  
  6. # zamiast funkcji uzywajac skladni jezykowej:
  7.  
  8. $d =$akt[6].$akt[7]; //wyciągnięcie dnia miesiąca z nazwy pliku
  9. $m = $akt[4].$akt[5]; //wyciągnięcie miesiąca z nazwy pliku
  10. $y = "{$akt[0]}{$akt[1]}{$akt[2]}{$akt[3]}"; //wyciągnięcie roku z nazwy pliku
nowicjuszek
Cytat(Comandeer @ 7.07.2015, 15:23:43 ) *
@nowicjuszek datę można wyciągnąć jako explode('_', $nazwa, 1)[0] i osobiście bym to przekazał do DateTime, żeby mieć ładny obiekt od zarządzania datą zamiast zabawy z substr

W jaki sposób byś wyciągnął datę ze zmiennej, za pomocą DateTime, np. dla:
  1. $a = 2015-12-30_internet_aktywacja


Dziękuję wszystkim za pomoc
Comandeer
  1. $a = '2015-12-30_internet_aktywacja';
  2. $data = new DateTime(explode('_', $a, 2)[0]); //ma być jednak 2, nie 1
  3.  
  4. var_dump($data);

To zwraca obiekt z konkretną datą.
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.