06. december 2003 - 19:11
Der er
24 kommentarer og 1 løsning
Slet mappe med filer og undermapper (recursive)
Hej. Jeg ønsker at kunne fjerne et helt bibliotek indeholdende filer, undermapper osv. Jeg har nedenstående kode, men vil høre, om der findes bedre/alternativer til den metode jeg bruger. Er løsningen i øvrigt sikker nok ? Skulle jo nødig have slettet forkerte filer :)
Annonceindlæg fra Cognizant
Agentic AI kræver mere end teknologi
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
06. december 2003 - 19:14
#1
Jeg tror ikke den kode fjerne ret meget :P
06. december 2003 - 19:15
#2
Ups ;) function dele($dir) { chmod($dir,0777); if (is_dir($dir)) { $handle = opendir($dir); while($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { delete($file."/".$filename); } } closedir($handle); rmdir($file); } else { unlink($file); } }
06. december 2003 - 19:15
#3
Hm, indrykning er ikke så fedt på eksperten :)
Slettet bruger
06. december 2003 - 19:16
#4
Tjae, den ligner jo meget den jeg bruger: function deldir($dir){ $current_dir = opendir($dir); while($entryname = readdir($current_dir)){ if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")){ deldir("${dir}/${entryname}"); }elseif($entryname != "." and $entryname!=".."){ unlink("${dir}/${entryname}"); } } closedir($current_dir); rmdir(${dir}); }
06. december 2003 - 19:19
#5
Hm, har din nogen fordele frem for min ?
Slettet bruger
06. december 2003 - 19:22
#6
Ikke umiddelbart, mit kan ikke slettet filer der ikke er uploadet via PHP. bare en sikkerhedsfeature ;)
06. december 2003 - 19:23
#7
Ah, smart. Hvordan tjekkes det ?
Slettet bruger
06. december 2003 - 19:29
#8
Jamen det tjekkes såmænd ikke, jeg CHMOD'er bare ikke filerne, så kan man ikke slette dem (altså hvis serveren er sat korrekt op og er en UNIX maskine)
06. december 2003 - 19:30
#9
Aaah, ok. På dén måde :)
06. december 2003 - 20:06
#10
webcreator >> een fejl ved din er at $file aldrig får en værdi (jeg gætter på du har omdøbt den parameter funktionen får og glemt at ændre navnet indeni funktionen)
06. december 2003 - 20:06
#11
Yep, og det har jeg faktisk siden fået rettet. Men tak alligevel :)
06. december 2003 - 20:12
#12
og dit kald til closedir skal ind i if-sætningen så du ikke prøver at lukke når du aldrig har åbnet.
06. december 2003 - 20:16
#13
Ja, det var nok en smart ting. Tak :)
06. december 2003 - 20:17
#14
din linie } else { jar ikke nogen if ( ... ) { som den hører til. mon ikke du mener: function dele($dir) { chmod($dir,0777); if (is_dir($dir)) { // det er en mappe $handle = opendir($dir); while($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { delete($dir."/".$filename); } closedir($handle); // flyttet ind i if unlink($dir); // nu kan vi slette selve mappen } else { // det er IKKE en mappe rmdir($file); // så vi sletter bare den fil } } mvh JakobA
06. december 2003 - 20:19
#15
og funktionen skal så hedde delete (tilføjet 'te') så den kalder sig selv rekursivt.
06. december 2003 - 20:21
#16
Jamen den har da også netop IF'en : if (is_dir($dir))
06. december 2003 - 20:21
#17
Oh, kan da godt se, at der er noget galt nu..
06. december 2003 - 20:22
#18
Skod. jeg troede på dine indrykninger, men du har jo glemt indrykning i den indre if sætning function delete($dir) { chmod($dir,0777); if (is_dir($dir)) { // det er en mappe $handle = opendir($dir); while($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { delete($dir."/".$filename); } } closedir($handle); // flyttet ind i if unlink($dir); // nu kan vi slette selve mappen } else { // det er IKKE en mappe rmdir($dir); // så vi sletter bare den fil } }
06. december 2003 - 20:23
#19
Yep, også lige det jeg studsede over :)
06. december 2003 - 20:27
#20
Dooh. ja du har helt ret. det var bare de indrykninger jeg snublede rundt i. Din oprindelige funktion burde faktisk virke, når blot $file laves til $dir og funktions navnet ændres function delete($dir) { // ændret navn så det passer med *2* chmod($dir,0777); if (is_dir($dir)) { $handle = opendir($dir); while($filename = readdir($handle)) { if ($filename != "." && $filename != "..") { delete($dir."/".$filename); // *2* } } closedir($handle); rmdir($dir); } else { unlink($dir); } }
06. december 2003 - 20:43
#21
Godt fungere det altså ikke. Hvis jeg angiver et dir, som ikke eksisterer, så fjernes en forkert mappe.
06. december 2003 - 20:43
#22
Og den fjerner ikke mapper med indhold.
06. december 2003 - 20:44
#23
Jeg har angivet mit dir til : mappe/sub-mappe Måske det skal være : /mappe/sub-mappe/ ?!
06. december 2003 - 20:53
#24
Sorry, jeg var lidt for hurtig. Tror jeg skal kigge lidt mere på min kode inden jeg brokker mig :)
20. december 2003 - 23:22
#25
Tak for hjælpen :)
Vi tilbyder markedets bedste kurser inden for webudvikling