Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Usuwanie katalogów wraz z plikami i katalogami, i tak dalej i tak dalej
deha21
post
Post #1





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

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


Witam,
Aktualnie mam taki skrypt który usuwa katalog wraz z plikami. Ale jeśli w tym katalogu są inne katalogi to wyskoczy błąd. Chciałbym żeby jeżeli jest tam katalog to żeby też go usunąło wraz z zawartością, jeśli w nim będą foldery to żeby też ta akcja się powtórzyła.
Próbowałem zrobić to za pomoca DirectoryIterator albo całkiem coś pomotałem.
Oto kod który mam teraz:
  1. if (isset($_POST['deletecatalog'])) {
  2. $katalog = "../".$directory."/".$_POST['deletecatalog'];
  3. if(glob($katalog.'/*')) {
  4. foreach (glob($katalog.'/*') as $filename){
  5. if($filename != '$katalog' && $filename != '..') {unlink($filename);}
  6. }
  7. }
  8. rmdir("../".$directory."/".$_POST['deletecatalog']);
  9. }


--------------------
Go to the top of the page
+Quote Post
zzeus
post
Post #2





Grupa: Zarejestrowani
Postów: 441
Pomógł: 71
Dołączył: 3.09.2007
Skąd: wrocław

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


Ładny przykład - http://www.php.net/manual/pl/directoryiterator.islink.php


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


Dzięki. Rzeczywiscie ładny przykład, gdyby tylko mi działał winksmiley.jpg

  1. if(isset($_POST['deletecatalog'])) {
  2.  
  3. function removeDir($path) {
  4. $dir = new DirectoryIterator($path);
  5. foreach ($dir as $fileinfo) {
  6. if ($fileinfo->isFile() || $fileinfo->isSymlink()) { // linia 152
  7. unlink($fileinfo->getPathName());
  8. } elseif (!$fileinfo->isDot() && $fileinfo->isDir()) {
  9. removeDir($fileinfo->getPathName());
  10. }
  11. }
  12. rmdir($path);
  13. }
  14. removeDir('../'.$directory.'/'.$_POST['deletecatalog']);
  15.  
  16. }


Błąd:
Kod
Fatal error: Call to undefined method DirectoryIterator::isSymlink() in /home/deha21/domains/dhetman.pl/public_html/filesbrowser/admin/filesbrowser.php on line 152


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





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




A jak masz dostęp do poleceń powłoki, to nie lepiej wywołać:
  1. exec('rm -rf /home/user/katalog');

?


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

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





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

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


Może i lepiej, i prościej ale nie chciałbym z tego korzystać. Skrypt ma być do różnych stron które nie zawsze będą stały na moim serwerze. A na innych dostęp do tych funkcji może być różny.


--------------------
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To użyj is_link() winksmiley.jpg
Inna sprawa, że jeśli to admin i masz możliwość, to możesz zawsze uzyć exec() i jako komendę wrzucić rekurencyjne, wymuszone usuwanie katalogu smile.gif
EDIT: Byli szybsi z tym execiem winksmiley.jpg

Ten post edytował thek 4.09.2009, 13:09:17


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
deha21
post
Post #7





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

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


Dzięki thek! Z is_link działa idealnie winksmiley.jpg


--------------------
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: 22.08.2025 - 00:42