Skripti skannaa hakemiston ja sen alihakemistot ja palauttaa tiedostojen polut arrayssa.
Funktio ottaa ensimmäiseksi parametriksi skannattavan hakemiston. Jos toinen parametri on määritelty, se palauttaa vain tiedostot joiden nimestä parametri löytyy.
<?php function dirscan($dir, $name = false){ //tarkistetaan onko hakemisto olemassa if(is_dir($dir)){ $basedir = dir($dir); } else { die("Directory does not exist."); } $files = array(); //luetaan hakemisto sekä jätetään pois . ja .. while(false !== ($file = $basedir -> read())){ if($file != ".." && $file != "."){ $filepath = $dir."/".$file; //tarkistetaan onko kohde tiedosto vai hakemisto //jos tiedosto, lisätään arrayhin if(is_file($filepath)){ //katsotaan onko tiedostonimeä määritetty if($name == false){ $files[] = $filepath; } else if(stristr($file, $name)){ $files[] = $filepath; } //jos hakemisto, ajetaan funktio uudella hakemistolla ja ympätään edellisiin } else if(is_dir($filepath)){ $files = array_merge($files, dirscan($filepath, $name)); } } } return $files; } ?>
Itellä on samanlainen, mutta siinä pystyy valitsemaan minkä mukaan tiedostot listataan. Eli siis nimen, muokkausajan tai koon mukaan joko ascending tai descending :P Kätsy sinänsä skripti kyllä!
ajv kirjoitti:
Kätsy sinänsä skripti kyllä!
Äääh! Nyt ne muokkaukset näihin kommentteihin! Vaikka sata kertaa tarkastaa mitä kirjottaa, niin silti tulee typoja!
Hyvin kätevä.
ei toimi
lainaus:
ei toimi
Aivan niin.
Kyllä mulla vaan toimii, ja nähtävästi muutamalla muullakin.
Ihan hauska, mutta jos vastaan tulee hakemisto johon ei ole oikeuksia, tyssää listaus siihen.
Eli kohdan:
} else if(is_dir($filepath)){
Muuttaa esim:
} else if(is_dir($filepath) && substr(sprintf('%o', fileperms($filepath)), -4) >= 755){
Niin homman pitäisi pelata.
Eipä toimi, mikäli ensimmäisenä tiedostona sattuu olemaan .-alkuinen (esim. .htaccess).
Pienillä muutoksilla funktio toimii myös yllämainituilla tiedostoilla. Tästä puuttuu kuitenkin alihakemistojen läpikäynti, koska en itse sitä tarvitse, sen lisääminen ei kuitenkaan luulisi olevan suuri ongelma.
Koodi:
<?php // Funktio hakemiston lukemiseen function dirscan($dir, $name = false) { // Luodaan lista tiedostoille. $files = array(); /*Luetaan seuraava tiedosto hakemistossa, mikäli se on mahdollista.*/ if ($handle = opendir($dir)) { /*Niin kauan kuin tiedostoja riittää, lisätään tiedosto listaan.*/ while (false !== ($file = readdir($handle))) { $filepath = $dir."/".$file; /*Jos seuraava alkio on tiedosto, siirrytään ehtolauseen sisään.*/ if(is_file($filepath)) { /*Jos tiedostonnimeä ei ole määritelty, lisätään kaikki tiedostot listaan.*/ if ($name == false) { $files[] = $file; /*Muutoin lisätään vain annetun päätteen omaavat tiedostot. Ehto siis täyttyy vain, mikäli tiedostoalkiosta löytyy määritelty pääte.*/ } else if (stristr($file, $name)) { /*Poistetaan tiedostonnimestä turhat merkit alusta. Funktio siis poistaa kaikki merkit ennen parametrina annettuja merkkejä.*/ $file = strpbrk($filepath, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); $files[] = $file; } } } // Suljetaan kansio. closedir($handle); } return $files; } ?>
Pahoittelen sisennysongelmia ja kommentointityylin vaihtelua. Nämä selvyyssyistä, koska muuten koodi juoksee aivan omilla riveillään.
Aihe on jo aika vanha, joten et voi enää vastata siihen.