Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Masowae usuwanie plików i folderów
Forum PHP.pl > Forum > PHP
deha21
Witam,
Robię skrypt który masowo (przez zaznaczenie checkbox'ów) będzie usuwał/przenosił pliki i foldery. Wcześniej miałem kod który usuwa foldery wraz z plikami/folderami i pomyślałem, że teraz też go użyję ale niestety nie działa. Usuwa zaznaczone foldery ale przy plikach jest błąd. Oto kod:
  1. if (!empty($_POST['checkbox']) && isset($_POST['type'])){
  2.  
  3. if ($_POST['type']=='delete') {
  4.  
  5. function removeDir($path) {
  6. $dir = new DirectoryIterator($path);
  7. foreach ($dir as $fileinfo) {
  8. if ($fileinfo->isFile() || is_link($fileinfo)) {
  9. unlink($fileinfo->getPathName());
  10. } elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
  11. removeDir($fileinfo->getPathName());
  12. }
  13. }
  14. rmdir($path);
  15. }
  16.  
  17. foreach ($_POST['checkbox'] as $filesmass) {
  18. removeDir('../'.$directory.'/'.$filesmass);
  19. }
  20. }
  21. }


Błąd jaki wyskakuje to:
  1. Fatal error: Uncaught exception 'RuntimeException' with message 'DirectoryIterator::__construct(../files/krd.gif) [<a href='directoryiterator.--construct'>directoryiterator.--construct</a>]: failed to open dir: Not a directory' in /home/***/filesbrowser.php:201 Stack trace: #0 /home/***/filesbrowser.php(201): DirectoryIterator->__construct('../files/krd.gi...') #1 /home/***/filesbrowser.php(213): removeDir('../files/krd.gi...') #2 {main} thrown in /home/**/filesbrowser.php on line 201


Jak tak patrzę na ten skrypt to powinien tez usuwać pliki winksmiley.jpg Ale z tego co widze w błędzie musi to być folder. Więc jak przerobić kod żeby usuwał też pliki?

Pozdrawiam
nospor
no to pomysl chwilke....
Jako parametr do removeDir zapodajesz sciezke do pliku (zmienna $path) a nastepnie robisz:
rmdir($path); na tym pliku. Naprawde nie widzisz tu bledu?
Czemu nie dasz sprawdzania czy to plik czy katalog i w zaleznosci od tego bedziesz wywolywal odpowiednią funkcje?
deha21
Właśnie! Bardziej skupiłem się na części powyżej. Ale kombinuję i zrobilem coś takiego (oczywiście nie działa)
  1. function removeDir($path) {
  2. $dir = new DirectoryIterator($path);
  3. foreach ($dir as $fileinfo) {
  4. if ($fileinfo->isFile() || is_link($fileinfo)) {
  5. unlink($fileinfo->getPathName());
  6. } elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
  7. removeDir($fileinfo->getPathName());
  8. }
  9. }
  10. if($dir->isFile) { unlink($path); }
  11. elseif ($dir->isDir) { rmdir($path); }
  12. }
  13.  
  14. foreach ($_POST['checkbox'] as $filesmass) {
  15. removeDir('../'.$directory.'/'.$filesmass);
  16. }


Dalej coś próbuję, z marnym skutkiem.
nospor
sprawdzanie powinienes juz zaczac przet tworzeniem iteratora. do niego tez blednie zapodajesz plik.

ps:
http://pl2.php.net/manual/pl/function.is-dir.php
erix
Cytat
Robię skrypt który masowo (przez zaznaczenie checkbox'ów) będzie usuwał/przenosił pliki i foldery. Wcześniej miałem kod który usuwa foldery wraz z plikami/folderami i pomyślałem, że teraz też go użyję ale niestety nie działa. Usuwa zaznaczone foldery ale przy plikach jest błąd. Oto kod:

A nie myślałeś o:
  1. exec('rm -rf katalog')
  2. RecursiveDirectoryIterator - pozbyłbyś się rekurencji
deha21
Zrobiłem coś takiego. Działa na razie bez problemów. Czy to dobry sposób?
  1. function removeDir($path) {
  2. if(is_dir($path)) {
  3. $dir = new DirectoryIterator($path);
  4. foreach ($dir as $fileinfo) {
  5. if ($fileinfo->isFile() || is_link($fileinfo)) {
  6. unlink($fileinfo->getPathName());
  7. } elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
  8. removeDir($fileinfo->getPathName());
  9. }
  10. }
  11. rmdir($path);
  12. } elseif (is_file($path)) { unlink($path); }
  13. }
  14. foreach ($_POST['checkbox'] as $filesmass) {
  15. removeDir('../'.$directory.'/'.$filesmass);
  16. }
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.