Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Masowae usuwanie plików i folderów, DirectoryIterator
deha21
post
Post #1





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


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


--------------------
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




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?


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

"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
deha21
post
Post #3





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


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.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




sprawdzanie powinienes juz zaczac przet tworzeniem iteratora. do niego tez blednie zapodajesz plik.

ps:
http://pl2.php.net/manual/pl/function.is-dir.php


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

"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
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
deha21
post
Post #6





Grupa: Zarejestrowani
Postów: 544
Pomógł: 5
Dołączył: 18.08.2009

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


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. }


--------------------
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: 19.08.2025 - 14:31