Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] usuwanie plików i katalogu
Forum PHP.pl > Forum > PHP
zzeus
Witam. Mam taka oto metode:

function UsunKatalog($id) {
$sciezka = PRODUKTY_DIR.$id;
if(is_dir($sciezka)) {
foreach(scandir($sciezka) as $plik) {
if($plik != "." && $plik != "..") {
$plik = $sciezka."/".$plik;
if(is_dir($plik)) {
UsunKatalog($plik);
} elseif (is_file($plik)){
@unlink($plik);
}
}
}
return rmdir($sciezka);
} else {
return false;
}
}

problem jest taki że zawsze usuwa ona pliki i katalog, ale w 9 na 10 przypadków zwraca false, o co chodzi ?
SirZooro
W tej funkcji jest błąd - nie będzie ona usuwać podkatalogów. Musisz przesunąć linię "$sciezka = PRODUKTY_DIR.$id;" na zewnątrz funkcji, bo inaczej przy rekurencyjnym wywołaniu będzie ona próbować usuwać podkatalog PRODUKTY_DIR.PRODUKTY_DIR.$id.'/'.podkatalog

Z tego co jednak piszesz nie używasz jej do usuwania podkatalogów, więc ten błąd nie powinien się ujawniać. Z drugiej jednak strony funkcja nie może jednocześnie usuwać katalogu z zawartością i jednocześnie zwracać false. Spróbuj dodać logowanie wywołań tej funkcji (wartość parametru i wartość zwracana) - może wtedy zobaczysz przyczynę błędu. Osobiście jedyne co mi przychodzi na myśl to próba usuwania nieistniejącego katalogu, ew. jakieś problemy z uprawnieniami.
zzeus
Dzięki za podpowiedź co do błędu, chociarz z założenia katalog zawiera tylko pliki więc to nie jest problem. Właśnie też podejrzewam że to może być problem z uprawnieniami, chociarz przy tworzeniu katalogu ustawiam prawa na 0777 ale windows chyba to ignoruje i tutaj może być błąd ale nie jestem pewny.
SirZooro
Oj zdziwisz się - Windows ma nawet więcej możliwych uprawnień do wyboru niż unix'y (wejdź sobie we właściwości pliku albo katalogu, i potem na zakładkę Zabezpieczenia - tam już jest ich trochę, a jak klikniesz Zaawansowane/Edytuj to znajdziesz jeszcze więcej). Zatem chmod jednak działa pod Windows, a uprawnienia 777 nic nie powinny tu popsuć.

Pod Windows może być jeszcze sytuacja że nie da się skasować katalogu który jest otwarty przez inny proces (wystarczy że ten inny proces do niego wejdzie), ale to raczej też nie to - wtedy by się sypało na rmdir że nie może usunąć katalogu. Spróbuj tak jak pisałem wcześniej logować czy wyświetlać na stronie wynik wykonania funkcji, i być może w ten sposób znajdziesz przyczynę.
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.