Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Usuwanie katalogu
Forum PHP.pl > Forum > Przedszkole
piotrooo89
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...
redelek
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
piotrooo89
już tak próbowałem... ale nic. po ustawieniu:
  1. <?php
  2. chmod($link, 0777);
  3. ?>


dalej mam to samo.
marcio
Przed zmiana chmodow za pomoca funkcji chmod() ustaw sobie umask() na 0 poniewaz php moze odbierac automatycznie prawa.
piotrooo89
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.
marcio
  1. <?php
  2. $umask = umask(0);
  3. chmod($link, 0777);
  4. umask($umask);
  5. rmdir($link);
  6. ?>
piotrooo89
nic dalej to samo. a mam pyt czy to może być powiązane z prawami do katalogu images?
Gość
a sprobuj dac
chdir(); do glownego
potem unlink absolute path
i sprawdz czy wszystkie katalogi "po drodze" maja odpowiednie prawa.
erix
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
piotrooo89
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.
erix
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.
marcio
  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
erix
Ale Twoja funkcja nie usunie podkatalogów...
piotrooo89
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.
erix
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. ?>
piotrooo89
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. ?>
erix
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.
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.