Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Wyrazenia reg
kontur
post
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


Moja funkcja ma za zadanie z $folderu_poczatkowego, przekopiowac wszystkie foldery do $nowy_folder. Dla folderow zagniezdzonych bezposrednio w $folder_poczatkowy wszystko ladnie dziala, ale problem pojawia sie gdy w jakis folder zagniezdzony jest glebiej i funkcja wywoluje sie rekurencyjnie. Konkretnie zawodzi wyrazenie regularne- przegladarka wyswietla ostrzezenie:

Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 31

a katalog sie nie tworzy. Siedze od 2 godzin i wpadlem na inny pomysl jak to zrealizowac, ale chcialbym sie dowiedziec co zrobilem zle. Czytalem manuala, przejzalem teorie z ksiazki juz n razy i nie mam pojecia gdzie tkwi blad :/
  1. function skopiuj_strukture($folder_poczatkowy,$nowy_folder)
  2. {
  3. $folder_poczatkowyBU=$folder_poczatkowy;
  4. if(substr($folder_poczatkowy,-1,1)!='/')
  5. {
  6. $folder_poczatkowy.='/';
  7. }
  8. if(!file_exists($nowy_folder))
  9. {
  10. mkdir($nowy_folder);
  11. }
  12. $podkatalogi=glob($folder_poczatkowy.'*');
  13. for($i=0;$i<count($podkatalogi);$i++)
  14. {
  15. if(is_dir($podkatalogi[$i]))
  16. {
  17. $wyr_reg='/'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)/';
  18. preg_match($wyr_reg,$podkatalogi[$i],$podkatalog);
  19. if(!file_exists($nowy_folder.'/'.$podkatalog[1]) && !is_file(($nowy_folder.'/'.$podkatalog[1])))
  20. {
  21. mkdir($nowy_folder.'/'.$podkatalog[1],0700,true);
  22. }
  23. skopiuj_strukture($podkatalogi[$i],$nowy_folder.'/'.$podkatalog[1]);
  24. }
  25. }
  26. }


gdy skorzystam z echo "</br>".$podkatalog[1];
to przegladarka wyswietli dla folderu na ktorym testuje:
adam_asnyk
cyprian_kamil_norwid
julian_tuwim
kazimierz_przerwa_tetmajer
konstanty_ildefons_galczynski
krzysztof_kamil_baczynski
leopold_staff
maria_konopnicka
tadeusz_rozewicz
Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 31
czyli funkca znalazla podkatalog w ktoryms z wyzej wymieninych katalogow, ale z jakiegos powodu preg_match tym razem nie zadzialal tak samo jak w poprzednich przypadkach.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




echo $wyr_reg;
Co zwraca?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kontur
post
Post #3





Grupa: Zarejestrowani
Postów: 36
Pomógł: 6
Dołączył: 3.04.2012

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


Cytat(nospor @ 12.04.2012, 08:02:26 ) *
echo $wyr_reg;
Co zwraca?


  1. $wyr_reg='/'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)/';
  2. echo $wyr_reg."</br>";

/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175\/([a-zA-Z0-9_]+)/
/wiersze175/tadeusz_rozewicz\/([a-zA-Z0-9_]+)/

Warning: preg_match() [function.preg-match]: Unknown modifier 't' in C:\Program Files\WebServ\httpd-users\cwiczenia\cw175a.php on line 32

czyli wyglada ok- w katalogu tadeusz_rozewicz jest faktycznie podfolder i funkcja go odnajduje tylko preg_match sie wykoleja

OK, juz dziala, za dlugo wczoaraj siedzialem;P
Problemem byly znaki '/' wystepujace w zagniezdzonej sciezce wystarczylo zmienic delimitery:
  1. $wyr_reg='~'.$folder_poczatkowyBU.'\/([a-zA-Z0-9_]+)~';


Ten post edytował kontur 12.04.2012, 07:33:55
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Musisz po prostu escapeować znak "/"

  1. $wyr_reg='/'.str_replace('/','\/',$folder_poczatkowyBU).'\/([a-zA-Z0-9_]+)/';


EDIT: Uprzedziłeś mnie z odpowiedzią smile.gif ale jak widać są dwa sposoby - z czego jednak twój jest lepszy wink.gif

Ten post edytował Sephirus 12.04.2012, 07:38:24


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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 Aktualny czas: 22.08.2025 - 02:40