Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyszukiwanie fraz w nazwach plików na serwerze
nowicjuszek
post 7.07.2015, 11:55:12
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 7.07.2015

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


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.
Go to the top of the page
+Quote Post
Comandeer
post 7.07.2015, 11:58:36
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


glob?


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 7.07.2015, 13:49:27
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Litości wink.gif

Tutaj masz cały wątek http://stackoverflow.com/questions/3321547...iterator-in-php
Interesuje Cię RegexIterator
Go to the top of the page
+Quote Post
nowicjuszek
post 7.07.2015, 14:11:27
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 7.07.2015

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


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. ?>
Go to the top of the page
+Quote Post
Comandeer
post 7.07.2015, 14:23:43
Post #5





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


@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


--------------------
Go to the top of the page
+Quote Post
KsaR
post 7.07.2015, 14:44:37
Post #6





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


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


Ten post edytował Ksar 7.07.2015, 15:23:40


--------------------
Go to the top of the page
+Quote Post
nowicjuszek
post 11.07.2015, 13:28:18
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 7.07.2015

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


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
Go to the top of the page
+Quote Post
Comandeer
post 11.07.2015, 13:42:42
Post #8





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

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


  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ą.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 2.05.2025 - 06:16