Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Zmiana nazwy katalogu
Forum PHP.pl > Forum > PHP
230005
Przy zmianie nazwy katalogu wszystkie pliki i podkatalogi kopiują się poprawnie za wyjątkiem jednego. Rzeczony podkatalog jest tworzony w nowym pod swoją nazwą, ale jako plik bez rozszerzenia.
  1.  
  2. public function renameDir($oldName, $newName)
  3. {
  4. $alt_umask = umask(0);
  5. mkdir($newName, 0777);
  6. umask($alt_umask);
  7.  
  8. $old = opendir($oldName);
  9.  
  10. while(false !== ($file = readdir($old)))
  11. {
  12. if($file != "." && $file != "..")
  13. {
  14. if(is_dir($file))
  15. {
  16. mkdir($newName.$file, 0777);
  17. $nextDir = opendir($oldName.$file);
  18.  
  19. while(false !== ($files = readdir($nextDir)))
  20. {
  21. if($files != "." && $files != "..")
  22. {
  23. copy($oldName.$file.'/'.$files, $newName.$file.'/'.$files);
  24. chmod($newName.$file.'/'.$files, 0777);
  25. unlink($oldName.$file.'/'.$files);
  26. }
  27. }
  28.  
  29. rmdir($oldName.$file);
  30. closedir($nextDir);
  31. }
  32. else
  33. {
  34. copy($oldName.$file, $newName.$file);
  35. chmod($newName.$file, 0777);
  36. unlink($oldName.$file);
  37. }
  38. }
  39. }
  40.  
  41. closedir($old);
  42. rmdir($oldName);
  43. }
  44.  

thek
Jeśli zmieniasz tylko nazwę katalogu (i nie zmieniasz ścieżki) to czemu nie użyjesz prostego rename wbudowanego w php?
Inna sprawa, że to niekoniecznie musi być przecież katalog. Zerknij sobie jaki "typ" zwraca Ci ów niepokorny winksmiley.jpg Może się okazać, że jest to dowiązanie (link symboliczny) i stąd jest problem, bo robisz tylko sprawdzenie czy coś jest katalogiem. Jeśli nie jest to traktujesz wszystko jako plik, choć nim de facto być nie musi. Lepiej też jeśli byś przerobił ten skrypt na rekurencyjny, bo inaczej nie wejdziesz głębiej niż na 1 poziom, a przez to podkatalogi w kolejnych zagłębieniach będą puste. Po prostu wywołaj przy katalogu odwołanie do funkcji o tej samej nazwie.
230005
Rename sciana.gif . Wcześniej chciałem użyć tej funkcji, ale sypała błędami. Teraz dzięki twojej sugestii zajrzałem raz jeszcze do manuala i mnie oświeciło. Wcześniej w stringach $oldName i $newName na końcu dawałem slashe, a w opisie funkcji stoi jak byk, że na końcu nie ma być slasha tongue.gif. Dzięki!!!
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.