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.