[php] removedir
[php] removedir
Stworzylem funkcje do usuwania folderow na uzytek przegladarki, jedna nie dziala tak jak powinna.
Funkcja w rzeczywistosci usuwa folder, czyli najpierw czysci z plikow w srodku a pozniej usuwa folder, jednak wywala mi przy tym kupe bledow, mimo poprawnie wykonanej operacji.
Moglbym, oczywiscie dac "@" ale to jest pojscie na latwizne - chce, zeby moja funkcja dzialala dobrze.
Funkcja przewiduje rowniez zagniezdzone foldery, wedlug ktorych powtarza ta sama procedure.
Oto zrodlo samej funkcji:
[php]<?php
function removedir($thedir)
{
$tablica = spisz_dira("all+");
foreach ($tablica as $key => $value)
{
$pozycja = $thedir."/".$value;
if (!is_dir($pozycja))
{
unlink ($pozycja);
}
elseif (is_dir($pozycja))
{
removedir($pozycja);
}
}
rmdir ($thedir);
}
?>[/php]
w zrodle wystepuje funkcja spisz_dira() - sluzy ona do spisywania tresci katalogu, oto jej tresc:
[php]<?phpfunction spisz_dira($type)
{
if ($type == "all+")
{
global $thedir;
$fh = opendir($thedir);
}
elseif ($type == "files_only" || $type == "all")
{
global $dir;
$fh = opendir($dir);
}
$i = 0;
while (false !== ($file = readdir($fh)))
{
if ($file !== "." && $file !== "..")
{
if ($type == "all+")
{
$tmpvar = $thedir.$file;
}
else
{
$tmpvar = $dir.$file;
}
if ($type == "files_only")
{
if (is_dir($tmpvar) != true)
{
$tablica[$i] = $file;
}
}
elseif ($type == "all" || $type == "all+")
{
$tablica[$i] = $file;
}
$i++;
}
}
return $tablica;
}
?>[/php]
czy ktos z was mialby pojecie, daczego funkcja nie dziala? Tzn. najgorsze jest to, ze dziala, tylko zglasza bledy, jak wiec poza "@" je zlikwidowac?
Funkcja w rzeczywistosci usuwa folder, czyli najpierw czysci z plikow w srodku a pozniej usuwa folder, jednak wywala mi przy tym kupe bledow, mimo poprawnie wykonanej operacji.
Moglbym, oczywiscie dac "@" ale to jest pojscie na latwizne - chce, zeby moja funkcja dzialala dobrze.
Funkcja przewiduje rowniez zagniezdzone foldery, wedlug ktorych powtarza ta sama procedure.
Oto zrodlo samej funkcji:
[php]<?php
function removedir($thedir)
{
$tablica = spisz_dira("all+");
foreach ($tablica as $key => $value)
{
$pozycja = $thedir."/".$value;
if (!is_dir($pozycja))
{
unlink ($pozycja);
}
elseif (is_dir($pozycja))
{
removedir($pozycja);
}
}
rmdir ($thedir);
}
?>[/php]
w zrodle wystepuje funkcja spisz_dira() - sluzy ona do spisywania tresci katalogu, oto jej tresc:
[php]<?phpfunction spisz_dira($type)
{
if ($type == "all+")
{
global $thedir;
$fh = opendir($thedir);
}
elseif ($type == "files_only" || $type == "all")
{
global $dir;
$fh = opendir($dir);
}
$i = 0;
while (false !== ($file = readdir($fh)))
{
if ($file !== "." && $file !== "..")
{
if ($type == "all+")
{
$tmpvar = $thedir.$file;
}
else
{
$tmpvar = $dir.$file;
}
if ($type == "files_only")
{
if (is_dir($tmpvar) != true)
{
$tablica[$i] = $file;
}
}
elseif ($type == "all" || $type == "all+")
{
$tablica[$i] = $file;
}
$i++;
}
}
return $tablica;
}
?>[/php]
czy ktos z was mialby pojecie, daczego funkcja nie dziala? Tzn. najgorsze jest to, ze dziala, tylko zglasza bledy, jak wiec poza "@" je zlikwidowac?
Ostatnio zmieniony wt maja 18, 2004 7:59 pm przez Dreen, łącznie zmieniany 2 razy.
Re: [php] removedir
Mógłbyś napisać jakiego typu to są błędy. Podaj ich treść. Wtedy łatwiej je zlokalizować.
Re: [php] removedir
wiedzialem zee o czyms zapomnialem
no to tak: bledy sa dziwne. zwraca kilka razy ten sam blad:
jesli ktos jakims cudem wiedzialby o co chodzi to dziekuje za pomoc
ps. mala modyfikacja - w pierwszym zrodle skasowalem jedna linie niepotrzebna - nie rozwiazuje to jednak problemu.
no to tak: bledy sa dziwne. zwraca kilka razy ten sam blad:
dodatkowo czasami (nie wiem od czego to zalezy) zglasza jeszcze blad:Warning: unlink() failed (No such file or directory) in c:\phpdev\www\UFB-pliki\mod_actions.php on line 69
// w pierwszym zrodle pomocniczym jest to linia 10
Kod: Zaznacz cały
Warning: rmdir() failed (Directory not empty) in c:\phpdev\www\UFB-pliki\mod_actions.php on line 77ps. mala modyfikacja - w pierwszym zrodle skasowalem jedna linie niepotrzebna - nie rozwiazuje to jednak problemu.
-
Grzegorz Winiarski
- Nowy

- Posty: 147
- Rejestracja: pt lut 27, 2004 10:36 pm
- Lokalizacja: Kraków
Re: [php] removedir
Prawde mowiąc to nie wiem co jest źle, ale ja w takich przyadkach robie tak:
[php]<?php
//linia 10
if(!unlink($pozycja)) echo '[.'$pozycja.']';
?>[/php]
Sam będziesz mogł sprawdzić co PHP próbuje usunąć.
[php]<?php
//linia 10
if(!unlink($pozycja)) echo '[.'$pozycja.']';
?>[/php]
Sam będziesz mogł sprawdzić co PHP próbuje usunąć.
Re: [php] removedir
dobra!
poradzilem sobie jakos z tym, ze usuwa mi wszystkie pliki w danym katalogu, jesli wskaze na katalog. mam jeszcze co prawda maly problem ale to juz nie dotyczy tego tematu a i tak sobie poradze
dzieki za pomoc
poradzilem sobie jakos z tym, ze usuwa mi wszystkie pliki w danym katalogu, jesli wskaze na katalog. mam jeszcze co prawda maly problem ale to juz nie dotyczy tego tematu a i tak sobie poradze
dzieki za pomoc
Re: [php] removedir
mam z tym kolejn problem...
chodzi o usuwanie pustych folderow, kiedy bowiem uzyje poprostu komendy rmdir, a folder jest pust, usunie sie bez problemu, ale kiedy juz wloze to do funkcji - wyskakuje blad. Obecnie funkcja dziala tak:
[php]<?php
function removedir($thedir) // deklaracja funkcji - $thedir to cel do usuniecia
{
$tablicak = spisz_dira("all", $thedir."/"); // ta funkcja ideksuje pliki wewnatrz katalogu i dziala dobrze, mniejsza o to jak
$fcount = count($tablicak);
if ($fcount == 0) // teraz sprawdzam czy katalog jest pusty, jesli tak, no to chcialbym go usunac
{
rmdir($thedir); // tu wyskakuje blad w przypadku pustego folderu
}
else // jesli folder nie jest pusty, no to trza go wyczyscic i potem usunac...
{
foreach ($tablicak as $key => $value) // dla kazdej pozycji katalogu...
{
$pozycja = $thedir."/".$value;
if (!is_dir($pozycja))
unlink ($pozycja); // ...usun pozycje jesli jest ona plikiem,...
elseif (is_dir($pozycja))
removedir($pozycja); //...lub wywolaj dla niej funcje jeszcze raz, jesli jest folderem
}
rmdir($thedir); // po skonczonym czyszczeniu usun katalog, tu rowniez wyskakuje blad, jesli w folderze znajdowaly sie pliki...
}
}
?>[/php]
probowalem zamienic rmdir na echo zeby sprawdzic jaka nazwa sie genuruje, ale generuje sie dobra nazwa. Zreszta, zeby sie upewnic wstawilem rmdr("poprawnanazwa"); w miejscu, gdzie normalnie wywoluje funkcje, jesli naplynelo zadanie usuniecia katalogu...
Generowany blad, to tak jak wczesniej Brak Dostepu (Permission Denied), wiec nazwa tak czy owak jest dobra bo byloby Not Such File Or Dir.
Jesli ktos ma jakis pomysl, to bardzo prosze o pomoc
chodzi o usuwanie pustych folderow, kiedy bowiem uzyje poprostu komendy rmdir, a folder jest pust, usunie sie bez problemu, ale kiedy juz wloze to do funkcji - wyskakuje blad. Obecnie funkcja dziala tak:
[php]<?php
function removedir($thedir) // deklaracja funkcji - $thedir to cel do usuniecia
{
$tablicak = spisz_dira("all", $thedir."/"); // ta funkcja ideksuje pliki wewnatrz katalogu i dziala dobrze, mniejsza o to jak
$fcount = count($tablicak);
if ($fcount == 0) // teraz sprawdzam czy katalog jest pusty, jesli tak, no to chcialbym go usunac
{
rmdir($thedir); // tu wyskakuje blad w przypadku pustego folderu
}
else // jesli folder nie jest pusty, no to trza go wyczyscic i potem usunac...
{
foreach ($tablicak as $key => $value) // dla kazdej pozycji katalogu...
{
$pozycja = $thedir."/".$value;
if (!is_dir($pozycja))
unlink ($pozycja); // ...usun pozycje jesli jest ona plikiem,...
elseif (is_dir($pozycja))
removedir($pozycja); //...lub wywolaj dla niej funcje jeszcze raz, jesli jest folderem
}
rmdir($thedir); // po skonczonym czyszczeniu usun katalog, tu rowniez wyskakuje blad, jesli w folderze znajdowaly sie pliki...
}
}
?>[/php]
probowalem zamienic rmdir na echo zeby sprawdzic jaka nazwa sie genuruje, ale generuje sie dobra nazwa. Zreszta, zeby sie upewnic wstawilem rmdr("poprawnanazwa"); w miejscu, gdzie normalnie wywoluje funkcje, jesli naplynelo zadanie usuniecia katalogu...
Generowany blad, to tak jak wczesniej Brak Dostepu (Permission Denied), wiec nazwa tak czy owak jest dobra bo byloby Not Such File Or Dir.
Jesli ktos ma jakis pomysl, to bardzo prosze o pomoc
Re: [php] removedir
SUKCES! Zwyciezylem z php, udalo mi sie zrbic to
macie tu przydatne narzedzie, do rekusrywnego usuwania folderu i jego zawartosci:
[php]<?php
function spisz_dira($type, $dir) {
$files = array();
$fh = opendir($dir);
while (false !== ($filename = readdir($fh)))
{
if ($filename == "." || $filename == "..")
continue;
if ($type == "files_only")
{
if (!is_dir($dir.$filename))
array_push($files, $filename);
}
elseif ($type == "all")
array_push($files, $filename);
}
closedir($fh);
return $files;
}
function rec_remove($thedir)
{
$tablicak = spisz_dira("all", $thedir);
$fcount = count($tablicak);
if ($fcount == 0)
rmdir ($thedir);
else
{
foreach ($tablicak as $key => $value)
{
$pozycja = $thedir.$value;
if (!is_dir($pozycja))
unlink ($pozycja);
elseif (is_dir($pozycja))
rec_remove($pozycja); // rec
}
rmdir($thedir);
}
}
?>[/php]
macie tu przydatne narzedzie, do rekusrywnego usuwania folderu i jego zawartosci:
[php]<?php
function spisz_dira($type, $dir) {
$files = array();
$fh = opendir($dir);
while (false !== ($filename = readdir($fh)))
{
if ($filename == "." || $filename == "..")
continue;
if ($type == "files_only")
{
if (!is_dir($dir.$filename))
array_push($files, $filename);
}
elseif ($type == "all")
array_push($files, $filename);
}
closedir($fh);
return $files;
}
function rec_remove($thedir)
{
$tablicak = spisz_dira("all", $thedir);
$fcount = count($tablicak);
if ($fcount == 0)
rmdir ($thedir);
else
{
foreach ($tablicak as $key => $value)
{
$pozycja = $thedir.$value;
if (!is_dir($pozycja))
unlink ($pozycja);
elseif (is_dir($pozycja))
rec_remove($pozycja); // rec
}
rmdir($thedir);
}
}
?>[/php]
Re: [php] removedir
A ten skrypt usuwa katalog który ma u siebie na HDD użytkownik, czy usuwa z serwera 
Re: [php] removedir
oczywiscie ze z serwera, php dziala tylko po stronie serwera. Usuniecie folderu uzytkownikowi z HDD jest nie mozliwe przy uzyciu php.
