Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Hakemistoskanneri

Sivun loppuun

Tempfile [18.04.2004 13:26:00]

#

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;
}
?>

ajv [18.04.2004 21:32:57]

#

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 [18.04.2004 21:35:25]

#

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!

sooda [19.04.2004 11:20:10]

#

Hyvin kätevä.

temu92 [18.05.2005 10:58:54]

#

ei toimi

AavikkoRotta [15.10.2005 02:41:50]

#

lainaus:

ei toimi

Aivan niin.
Kyllä mulla vaan toimii, ja nähtävästi muutamalla muullakin.

optimusprime [22.11.2006 20:12:29]

#

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.

Hugo [08.02.2007 18:08:50]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta