Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie folderów plików i podkatalogu z plikami
Forum PHP.pl > Forum > Przedszkole
maniek2512
Witam mam problem z usuwaniem albumów, zrobiłem juz skrypt dodający albumy oraz zdjęcia do nich lecz nie mogę sobie poradzić z usuwaniem albumów. Patrzyłem już kilkanaście skryptów lecz żaden nie spełniał moich oczekiwań.

Zacznijmy od tego, że mam folder admin w którym znajduje się ów skrypt, ścieżka do folderu z albumami: ../galeria/zdjecia/-nazwa_albumu- oraz z miniaturkami ../galeria/zdjecia/-nazwa_albumu-/mini
nazwy albumów pobierane są z bazy danych i wyświetlane w liście rozwijanej

  1.  
  2. <form enctype="multipart/form-data" method="post" action="galeria.php?page=usun_album2">
  3.  
  4.  
  5. <?php
  6.  
  7.  
  8.  
  9. $link = mysql_connect('*********', '*************', '***************') or die('Błąd: Nie można połączyć z MySQL!');
  10.  
  11. mysql_select_db(nfswinfo_osada) or die('Błąd: Nie można wybraż bazy danych!');
  12.  
  13. $zapytanie = mysql_query ("SELECT * FROM albumy ORDER BY nazwa ASC");
  14.  
  15. echo '<select name="album">';
  16.  
  17. echo '<option value="">Wybierz Album</option>';
  18.  
  19. while($option = mysql_fetch_assoc($zapytanie)) {
  20.  
  21. echo '<option value="'.$option['nazwa'].'">'.$option['nazwa'].'</option>';
  22.  
  23. }
  24.  
  25. echo '</select>';
  26.  
  27. ?>
  28.  
  29. <input type="submit" name="Submit" value="Usun">
  30.  
  31.  
  32. </form>
  33.  
  34.  
  35.  
  36.  





nazwę albumu przekazuję i odbieram metodą POST

  1. $directory = $_POST['album'];
  2. $dir = "../galeria/zdjecia/$directory";


Jak pisałem wcześniej patrzyłem na kilku stronach również w manualu lecz niestety tylko jeden ze skryptów/funkcji usunął mi zdjęcie z katalogu lecz katalog mini wraz z plikami się w nim znajdującymi pozostał nietknięty, a co za tym idzie główny katalog (album) również nie został usunięty.

Proszę o pomoc w napisaniu/ przerobieniu skryptu(poniżej) tak by usuwał album wraz ze zdjęciami i katalogiem mini(w którym również znajdują się zdjęcia).

  1. function rrmdir($dir) {
  2. if (is_dir($dir)) {
  3. $objects = scandir($dir);
  4. foreach ($objects as $object) {
  5. if ($object != "." && $object != "..") {
  6. if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
  7. }
  8. }
  9. reset($objects);
  10. rmdir($dir);
  11. }
  12. }


Przepraszam za moją głupotę lecz dopiero się uczę. Może polecilibyście jakąś dobrą książkę/podręcznik na temat php?
b4rt3kk
Musisz usunąć zawartość katalogu by go usunąć, funkcja unlink();

Jaka jest struktura tychże katalogów? Istnieją foldery w folderze?

  1. function deleteDir($directory) {
  2.  
  3. $dir=opendir($directory);
  4.  
  5. // czytasz zawartość w pętli
  6. while($fileName=readdir($dir)) {
  7. if (is_dir($fileName)) {
  8. // jeśli plik jest katalogiem wywołujemy funkcję rekursywnie dla podkatalogu
  9. deleteDir($directory . '/' . $fileName);
  10. } else {
  11. // jeśli plik nie jest katalogiem
  12. unlink($directory . '/' . $fileName);
  13. }
  14. }
  15.  
  16. }


To tak w skrócie i uproszczeniu.
maniek2512
nazwa albumu np: testowy album/mini
w albumie testowy album znajdują się pliki oraz w katalogu mini znajdują się pliki (wszystkie z rozszerzeniem .jpg)

niestety powyższy skrypt nie działa, jakie muszę mieć ustawione chmod'y do folderów? Może w tym jest problem (mam 755)
b4rt3kk
Mogłem się walnąć w ścieżkach, ale generalnie chodzi mi o zasadę:

1. otwórz katalog
2. przeglądaj zawartość plik po pliku
3. sprawdź czy plik to katalog, jeśli tak wróć do pkt.1
4. usuń plik
maniek2512
  1. <?php
  2. $album = $_POST['album']; //pobieranie nazwy albumu
  3. $directory = "../galeria/zdjecia/$album"; // ścieżka do albumu
  4.  
  5.  
  6.  
  7. function deleteDir($directory) {
  8.  
  9. $dir=opendir($directory);
  10.  
  11. // czytasz zawartość w pętli
  12. while($fileName=readdir($dir)) {
  13. if (is_dir($fileName)) {
  14. // jeśli plik jest katalogiem wywołujemy funkcję rekursywnie dla podkatalogu
  15. deleteDir($directory . '/' . $fileName);
  16. } else {
  17. // jeśli plik nie jest katalogiem
  18. unlink($directory . '/' . $fileName);
  19. }
  20. }
  21.  
  22. }
  23.  
  24.  
  25.  
  26. ?>
  27.  


Mam coś takiego lecz nie usuwa to ani plików ani folderów
podam jak wyglądają katalogi:


strona/admin/usun_album.php - tutaj znajduje się skrypt
strona/galeria/zdjecia/nazwa_albumu/ -tutaj znajduje się główny katalog albumu
strona/galeria/zdjecia/nazwa_albumu/mini/ -tutaj znajdują sie miniaturki

b4rt3kk
Poprawna wersja funkcji, usuwa zawartość folderów:

  1. function deleteDir($directory) {
  2.  
  3. $dir = opendir($directory);
  4.  
  5. while($fileName = readdir($dir)) {
  6.  
  7. if (is_dir($directory.'/'.$fileName)) {
  8. if ($fileName != '.' AND $fileName != '..') {
  9. deleteDir($directory.'/'.$fileName);
  10. }
  11. } else {
  12. unlink($directory.'/'.$fileName);
  13. }
  14.  
  15. }
  16.  
  17. }
maniek2512
Coś chyba robię nie tak;/
  1. <?php
  2. $album = $_POST['album'];
  3. $directory = "../galeria/zdjecia/$album"; // directory name
  4.  
  5.  
  6.  
  7. function deleteDir($directory) {
  8.  
  9. $dir = opendir($directory);
  10.  
  11. while($fileName = readdir($dir)) {
  12.  
  13. if (is_dir($directory.'/'.$fileName)) {
  14. if ($fileName != '.' AND $fileName != '..') {
  15. deleteDir($directory.'/'.$fileName);
  16. }
  17. } else {
  18. unlink($directory.'/'.$fileName);
  19. }
  20.  
  21. }
  22.  
  23. }
  24.  
  25.  
  26.  
  27. ?>



I nic się nie dzieje po odpaleniu, katalogi oraz pliki dalej są na serwerze ;/
b4rt3kk
Czy aby nie zapominasz o wywołaniu funkcji?

  1. deleteDir($directory);


dodaj na samym dole, pod definicją funkcji.
maniek2512
Mówiłem, że jestem tępy. Usuwa pliki lecz foldery pozostały


edit:// Dzięki za pomoc. Temat można zamknąćsmile.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.