Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: tworzenie nowych nazw katalogow.
Forum PHP.pl > Forum > Przedszkole
Lerno
Mam taki problem. Tworze sobie katalog x. I w tym katalogu tworza sie automatycznie podkatalogi i wlasnie tutaj mam maly problemik. Jako ze one musza sie generowac automatycznie musza miec, kazdy inna nazwe. Jest to na tyle "skomplikowane", ze nazwa tych podkatalogow czesciowo takze jest generowana i nalezy tylko dodawac jakis specyficzny element unikalny dla kazdego podkatalogu.
Wiec pierwsze co przychodzi na mysl to podczepic numerek na koniec nazwy i po sprawie. No i wlasnie. Mam dla przykladu podkatalogi:

x_ble_ble_1
x_ble_ble_2
x_bleble_ble_1
x_costam_costam_costam_1

I teraz musze napisac skrypt ktory ma juz jakas nazwe (w zmiennej) i musi sprawdzic czy owa nazwa istnieje i jesli nie to stworzyc ja z nr na koncu 1, jesli zas istnieje np: bylo by to x_ble_ble przeskanuje ten katalog zliczajac te elementy identyczne i dodajac 1 za ostatnia.

Nazwy podkatalogow generowane moga sie zdarzyc te same, stad nalezy je odroznic bo kazdy z nowo generowanych sie podkatalogow (nawet o tej samej nazwie) zawiera inny plik, ktory z kolei zawsze ma taka sama nazwe. Tego nie przeskocze niestety.
Jeszcze inaczej wyjasniajac nazwa podkatalogu na wstepie ma jakas nazwe. Taka nazwa moze juz istniec, lub nie, jednak za kazdym razem trza jej dodac numerek, albo 1, albo o 1 wiekszy od maxymalnej wartosci jaka stoi za ta nazwa w juz stworzonym podkatalogu.

Problem mam w tym, ze oczywiscie jak nie istnieje to sobie stworze, jak istnieje jeden to sobie zwieksze o 1 gorzej jesli istnieje takich podkatalogow wiecej niz 1, wtedy mam problem z petla. Tzn. przelatuje sobie petla while przez katalog nadrzedny (readdir) i jesli znajde taka sama nazwe to... no wlasnie co?
Jak zwieksze o 1 ot tak to mi stworzy np 2, szkoda tylko ze ta 2 tez istnieje, wiec wypadalo by sprawdzic ponownie czy po zwiekszeniu o 1 juz taka nazwa nie wystepuje, ale nie moge sobie z tym poradzic. Nie chce myslec jak tych nazw bedzie z 10 winksmiley.jpg
Tu trzeba jak sadze rekurencje zastosowac, tyle ze to nie jest zadna funkcja odosobniona a element odosobnionego skryptu. Chyba ze moze stworzyc taka oddzielna funkcje?
Mysle jednak ze za bardzo zagalopowalem sie w ten problem, a zdaje sie on byc latwy, wiec sadze ze poprostu za bardzo kombinuje i jest jakis latwiejszy sposob smile.gif

Jak mozecie poradzic mi jak to ugrysc bylbym wdzieczny.

Probuje tak:
  1. <?php
  2.  
  3. $new_dir = 'nazwa_' . $nazwa . '_' . $liczba;
  4. $liczba1 = $liczba+1;
  5. $new_dir1 = 'nazwa_' . $nazwa . '_' . $iczba1;
  6. $dir_source = opendir(katalog) or die('Błąd przy próbie otwarcia katalogu!');
  7. while($dir = readdir($dir_source)){
  8.  if(is_dir('katalog/' . $new_dir)){
  9. $znalazlem = 'true';
  10.  }
  11. }
  12. if(isset($znalazlem)){
  13. $new_dir = 'katalog/' . $new_dir1;
  14. mkdir($new_dir);
  15. }
  16. else{
  17. $new_dir = 'katalog/' . $new_dir;
  18. mkdir($new_dir);
  19. }
  20.  
  21. ?>



i dziala to ok jak nie ma takiej nazwy, albo jest 1. Jesli jest wiecej to juz dupa sad.gif
MoD
Zapisz sobię liczbę $liczba1 do pliku, np do liczba.txt . Skrypt niech zwiększy numer tam zapisany, doda do nazwy katalogu i po sprawie smile.gif
Aha, i na końcu jeszcze wypadało by zapisać ten plik z nową liczbą smile.gif
Lerno
A nie da rady tego w petli zamknac? Kolejny plik, brrr smile.gif
Kurcze to cus petla jakos trza by, ale no probowalem roznych warinatow zwiekszania. Nawet do... while smile.gif No ale mizerny efekt.

Moze ktos ma inne rozwizanie?
rogrog
u mnie na plikach chodzi coś takiego (wybiera pierwszą wolną pozycję, przy dużej ilości plików nieefektywne)

  1. <?php
  2.  
  3.  
  4. $dirname = 'zgloszenia_praca'; 
  5. $partial_name = 'costam_czesciowa_nazwa_pliku';
  6.  
  7. $i = 1;
  8.  
  9. $filename = $dirname . '/' . $partial_name;
  10. while(file_exists($filename . '_' . $i . '_.txt')) { $i++; }
  11. $filename .= '_' . $i . '_.txt';
  12.  
  13. ?>


żeby przerobić na pracę na folderach powinna wystarczyć zmiana file_exists na is_dir
Lerno
Sek w tym ze to generalnie numerki all zwieksza, a chodzi tylko o pewne nazwy, nie wszystkie katalogi, a katalogi o tych samych nazwach. smile.gif
rogrog
no to najpierw sprawdzasz czy is_dir katalog o nazwie podstawowej (bez numerka) a jeżeli tak to nazwę następnego tworzysz z tego kodu... jeśli dobrze rozumiem o co chodzi smile.gif
Lerno
A co jak is_dir nawet podkatalogi traktuje jak pliki? smile.gif
Niestety czasami sie tak dzieje, to zadna nowosc i wlasnie w tym przypadku tak wlasnie sie dzieje biggrin.gif Ze is_dir mimo kupy katalogow widzi tylko dwa: . i ..
reszta to pliki.
fiszol
is_dir


pozdrawiam,
fiszol
yavaho
Ja mam tak:
$katalog=time();
I powinno dzialac bezblednie dopuki na serwerze nie wyczerpie sie bateryjka w zegarku winksmiley.jpg
Lerno
yavahoo: w sumie ciekawa metoda biggrin.gif
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.