![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
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 ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 32 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 441 Pomógł: 71 Dołączył: 3.09.2007 Skąd: wrocław Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 243 Pomógł: 32 Dołączył: 14.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
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ę. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 12:56 |