Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Usuwanie katalogu
piotrooo89
post 8.11.2008, 21:33:41
Post #1


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




mam następujący problem. usuwam sobie pliki i po każdej operacji usuwania chce sprawdzić czy katalog w którym były pliki jest pusty, jeśli tak to jego też usuwam. robię to tak:

  1. <?php
  2. @unlink('../images/'.$_GET[data].'/'.$_GET[zdj].'');
  3.    
  4.    $link = '../images/'.$_GET[data];
  5.    $open = opendir($link);
  6.    
  7.    $pusty = readdir($open);
  8.    if ($pusty == true)
  9.    {
  10.        rmdir($link);
  11.    }
  12. ?>


wywala mi: Warning: rmdir(../images/2008-11-08): Permission denied in c:\usr\krasnal\www\udladzieci\admin \editgal.php

a przy tworzeniu katalogu nadaje mu chmod'y 0777
  1. <?php
  2. mkdir("../images/$data", 0777);
  3. ?>


nie bardzo wiem o co chodzi. aha pliki z tego katalogu normalnie usuwa tylko ma problem z tym katalogiem...


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
redelek
post 8.11.2008, 21:42:54
Post #2





Grupa: Zarejestrowani
Postów: 658
Pomógł: 37
Dołączył: 4.06.2005
Skąd: Wawa

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


Cytat(piotrooo89 @ 8.11.2008, 21:33:41 ) *
mam następujący problem. usuwam sobie pliki i po każdej operacji usuwania chce sprawdzić czy katalog w którym były pliki jest pusty, jeśli tak to jego też usuwam. robię to tak:

  1. <?php
  2. @unlink('../images/'.$_GET[data].'/'.$_GET[zdj].'');
  3.    
  4.    $link = '../images/'.$_GET[data];
  5.    $open = opendir($link);
  6.    
  7.    $pusty = readdir($open);
  8.    if ($pusty == true)
  9.    {
  10.        rmdir($link);
  11.    }
  12. ?>


wywala mi: Warning: rmdir(../images/2008-11-08): Permission denied in c:\usr\krasnal\www\udladzieci\admin \editgal.php

a przy tworzeniu katalogu nadaje mu chmod'y 0777
  1. <?php
  2. mkdir("../images/$data", 0777);
  3. ?>


nie bardzo wiem o co chodzi. aha pliki z tego katalogu normalnie usuwa tylko ma problem z tym katalogiem...


Zobaczy czy uprawnienia nie ulegają zmianie podczas usunięcia jednego pliku.
Przed usunięciem ustaw jeszcze raz 0777 dla folderu i dopiero go wywal.

Pozdrawiam
Redelek


--------------------
Pozdrawiam
Piotrek R
Go to the top of the page
+Quote Post
piotrooo89
post 8.11.2008, 21:47:32
Post #3


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




już tak próbowałem... ale nic. po ustawieniu:
  1. <?php
  2. chmod($link, 0777);
  3. ?>


dalej mam to samo.


--------------------
Go to the top of the page
+Quote Post
marcio
post 8.11.2008, 22:46:13
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Przed zmiana chmodow za pomoca funkcji chmod() ustaw sobie umask() na 0 poniewaz php moze odbierac automatycznie prawa.


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
piotrooo89
post 9.11.2008, 16:44:41
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




albo ja coś robie nie tak albo coś jest zpipcone :/

  1. <?php
  2. umask(0777);
  3.        chmod($link, 0777);
  4.        rmdir($link);
  5. ?>


i dalej mam permision denied. nawet po ręcznej zamianie chmod'a nie działa.


--------------------
Go to the top of the page
+Quote Post
marcio
post 9.11.2008, 16:55:09
Post #6





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  1. <?php
  2. $umask = umask(0);
  3. chmod($link, 0777);
  4. umask($umask);
  5. rmdir($link);
  6. ?>


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
piotrooo89
post 9.11.2008, 16:57:16
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




nic dalej to samo. a mam pyt czy to może być powiązane z prawami do katalogu images?


--------------------
Go to the top of the page
+Quote Post
-Gość-
post 9.11.2008, 17:00:38
Post #8





Goście







a sprobuj dac
chdir(); do glownego
potem unlink absolute path
i sprawdz czy wszystkie katalogi "po drodze" maja odpowiednie prawa.
Go to the top of the page
+Quote Post
erix
post 9.11.2008, 20:56:28
Post #9





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




Hmm, nie wiem, że masz taką możliwość, ale czy nie mógłbyś tego zadania przerzucić na system?

  1. <?php
  2. exec('rm -r /sciezka/do/katalogu');
  3. ?>


Jeśli możesz, to obarcz tym system; sprawniej i szybciej wyjdzie. winksmiley.jpg


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

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
piotrooo89
post 10.11.2008, 09:45:35
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




zrobiłem jak poradziłeś erix. niestety nie podziałało.

mój kod wygląda tak:
  1. <?php
  2. @unlink('../images/'.$_GET[data].'/'.$_GET[zdj].'');
  3.    
  4.    $link = '../images/'.$_GET[data];
  5.    
  6.    $open = opendir($link);
  7.    $pusty = readdir($open);
  8.    if ($pusty === true)
  9.    {
  10.        exec('rm -r ../images/'.$_GET[data].'');
  11.    }
  12. ?>


i usuwa tylko pliki, pustego katalogu już nie chce... nie wiem co robię źle. katalog na 100% jest pusty, aha testuje na krasnalu.


--------------------
Go to the top of the page
+Quote Post
erix
post 10.11.2008, 22:32:08
Post #11





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




Cytat
Permission denied in c:\usr\krasnal\www\udladzieci\admin \editgal.php


No, to to nie zadziała, mój błąd - przepraszam - nie zauważyłem, że stawiasz to na windowsie...

Prawdopodobnie będziesz uruchamiał wszystko na Linuksie, więc ściągnij sobie narzędzie rm z http://unxutils.sourceforge.net/

Możesz jeszcze sprawdzać na wersję OS-u. Wtedy dla windows zamiast rm -r katalog użyj rmdir /s /q katalog.

No chyba, że na docelowym serwerze będą zablokowane funkcje powłoki, wtedy trzeba już kombinować z iteracją obiektów w katalogu.


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

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
marcio
post 11.11.2008, 01:06:12
Post #12





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


  1. <?php
  2. //funkcja
  3. function masowe_usuwanie($dir) {
  4.  
  5.      $k = $dir;
  6.      $kat = @opendir($k);
  7.      $ok = true;
  8.  
  9.      while($plik = @readdir($kat)) {
  10.        
  11.      $pplik = $k.'/'.$plik;
  12.  
  13.      if(is_file($pplik)) {
  14.  
  15.      if(unlink($pplik) !== true) {
  16.      
  17.      $ok = false;
  18.      break;
  19.      }
  20.   }
  21. }
  22.      if($ok == false) return false;
  23.    
  24.      else return true;
  25.    
  26. closedir($kat);
  27. }
  28.  
  29. //wywolanie
  30.  
  31. if(masowe_usuwanie($dirs))
  32.  
  33. if(rmdir($dirs)) echo('<script>alert("Wybrane katalogi zostaly usuniete");</script>');
  34. ?>

Ja uzywam tego i gitara gra


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
erix
post 11.11.2008, 11:31:50
Post #13





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




Ale Twoja funkcja nie usunie podkatalogów...


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

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
piotrooo89
post 11.11.2008, 12:01:19
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




kurcze głowię się i głowie nad tym nic nie wychodzi... przecież to nie może być aż tak trudne. warunek jest prosty jeśli nie ma plików w katalogu usuwa się go.


--------------------
Go to the top of the page
+Quote Post
erix
post 11.11.2008, 12:04:09
Post #15





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




No, jeśli nie ma plików w katalogu, to sam rmdir" title="Zobacz w manualu PHP" target="_manual wystarczy...

Może w ten sposób:
  1. <?php
  2. unlink($file);
  3. @rmdir(dirname($file));
  4. ?>


Ten post edytował erix 11.11.2008, 12:04:23


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

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
piotrooo89
post 11.11.2008, 12:29:58
Post #16


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




to może ja pokaże wszystko...

usuwam z bazy ok.
usuwam plik z katalogu ok.
teraz chce sprawdzić czy w katalogu jest jakiś plik jeśli nie to usuwam.

  1. <?php
  2. if (!empty($_GET[uid]))
  3. {
  4.    include('../mysql.inc');
  5.    $del= mysql_query("DELETE FROM galeria WHERE id='$_GET[uid]'");
  6.    
  7.    $link = '../images/'.$_GET[data].'/'.$_GET[zdj].'';
  8.    $l2 = '../images/'.$_GET[data];
  9.    
  10.    @unlink($link);
  11.    
  12.    $open = opendir($l2);
  13.    $pusty = readdir($open);
  14.    if ($pusty === true)
  15.    {
  16.        rmdir(dirname($link));
  17.    }
  18. }
  19. ?>


--------------------
Go to the top of the page
+Quote Post
erix
post 11.11.2008, 12:55:45
Post #17





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




Ale rmdir" title="Zobacz w manualu PHP" target="_manual usunie katalog, jeśli jest pusty, nie ma potrzeby dodatkowego sprawdzania:
Cytat
Attempts to remove the directory named by dirname. The directory must be empty,


Jeśli są jakieś pliki w katalogu, to go nie skasuje i zwróci false.


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

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

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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 03:16