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.