Location: PHPKode > scripts > DIR > dir/dir.class.php
<?

//########## WARNING ####################################################
//#																	  ###
//# This is a V.L.E.T. FUNCTION ( VERY LONG EXECUTION TIME FUNCTION ) ###
//#																	  ###
//########## WARNING ####################################################

/*

#########################################################################
# Dir ################################################ Version 0.1 beta #
------------------------------------------------------------------------- 

Nothing

-------------------------------------------------------------------------
###################################### by hide@address.com (docebola) #
#########################################################################

*/

// At first you must define the const "PATH_SEP", because
// the slashes can be back or normal. Look for your OS !

define ("PATH_SEP","\\"); // Win32 "\" | Linux,Unix "/"

// You can see that a lot of class vars and methods are not in
// use yet. The reason is, that this is the first release of the
// class "Dir" and i was testing some ways to get the best.

// If you want to test this class look at the next lines.

// $rootDir = "d:\Programme\Apache\htdocs";
// $dir = new Dir($rootDir);
// $dir->initRead($dir);

// If you have done this, you get all pathes wich are under the
// rootpath.

class Dir {

	//var $name;
	var $path;
	//var $id;
	//var $parent;
	//var $numChilds;
	//var $haveChilds;

	function Dir($path) {

		//$this->name = basename($path);
		$this->path = $path;
		//$this->id = $this->getId($path);
		//$this->parent = $this->getParent($path);
		//$this->numChilds = $this->getNumChilds($path);
		//$this->haveChilds = $this->haveChilds($path);
	}

	// not in use  "bool haveChilds(string $path){}"

	function haveChilds($path) {

		$childs = $this->dirChilds($path);
		if (!$childs) return false;
		else return true;
	}

	// not in use  "int getId(string $path){}"

	function getId ($path) {

		$parent = $this->getParent($path);
		$dir = $this->dirChilds($parent);
		for ($i=0; $i < count($dir); $i++) {

			if ($dir[$i]==$path) return $i;
		}
	}

	// not in use  "object getChild(int $ini=0){}"

	function getChild ($ini=0) {

		$child = $this->getChildById($ini);
		$dir = new Dir($child);
		return $dir;
	}

	// not in use  "string getChildById(int $id){}"

	function getChildById($id) {

		$childs = $this->dirChilds($this->DIR_VARS["path"]);
		if (empty($childs[$id])) return false;
		return $childs[$id];
	}

	// not in use  "string getParent(string $path){}"

	function getParent ($path) {
	
		$all = explode(PATH_SEP,$path);
		$last = array_pop($all);
		$parent = implode(PATH_SEP,$all);

		if (count($all)==0) return false;
		else return $parent;
	}

	// not in use  "int getNumChilds(string $path){}"

	function getNumChilds ($path) {

		$dir = $this->dirChilds($path);
		if (empty($dir)) return 0;
		$num = count($dir);
		return $num;
	}

	//################
	//# getAllChilds #
	//################

	function getAllChilds ($path) {

		if($childs = $this->dirChilds($path)) {
			
			for($i=0; $i < count($childs); $i++) {

				$childs[$i] = new Dir($childs[$i]);
			}
			
			return $childs;
		}
		else {

			return false;
		}
	}

	//#############
	//# dirChilds #
	//#############

	// Die Funktion "mixed dirChilds(string $path){}" gibt alle Kindordner,
	// des aktuellen Ordners "$this->path" zurück.

	function dirChilds ($path){ // dirChilds ->

		$files = $this->readDir($path); // -> liest den Ordner aus
		if ($dir=$this->getDir($files)) return $dir; // -> filtert alle Ordner, und gibt sie in einem Array zurück 
		else return false; // -> gibt "false" zurück, wenn keine Ordner existieren
	}

	//##########
	//# getDir #
	//##########

	// Die Funktion "mixed getDir(array $files){}" filtert alle Ordner.
	// Wenn keine Ordner existieren wird "false" zurückgegeben. 

	function getDir ($files) {

		$d=0; // Zähler für die Ordner

		for ($i=0; $i < count($files); $i++) {
		
			if (is_dir($files[$i])) { // Wenn der Pfad ein gültiger Ordner ist ->

				$dir[$d]=$files[$i]; // -> wird er in "$dir" gespeichert 
				$d++;
			}
		}

		if (empty($dir)) return false;
		else return $dir;
	}

	//###########
	//# readDir #
	//###########

	// Die Funktion "array readDir(string $path){}" gibt alle Files eines
	// Ordners "$path" in einem Array zurück.

	function readDir($path) {

		$name = basename($path); // Name des Ordners
		
		if (!$dir = @opendir($path)) // Hier wird der Ordner "$name" geöffnet
		die ("Der Ordner \"".$name."\" konnte nicht geöffnet werden !"); // Script wird beendet wenn "$dir" false ist
		
		$i=0; // Zähler für alle Files
		
		while ($file=readdir($dir)) { // Ordner "$name" wird gelesen

			if (is_dir($path.PATH_SEP.$file) && $file!="." && $file!="..") { // "." und ".." werden gefiltert

				$files[$i]=$path.PATH_SEP.$file; // Array "$files" beinhaltet alle Files bzw. Pfade
				$i++;
			}
		}
		
		closedir($dir); // Hier wird der Ordner wieder geschlossen
		
		return $files; // Das Array wird zurückgegeben
	}

	//############
	//# initRead #
	//############

	function initRead ($dir) {

		$childs = $dir->getAllChilds($dir->path);
		foreach ($childs as $elem) {
			$this->readall($elem);
		}

	}

	//###########
	//# readAll #
	//###########

	function readAll ($elem) {

		if($childs = $elem->getAllChilds($elem->path)) {
			foreach ($childs as $elem) {
				echo $elem->path."<br>";
				$this->readAll($elem);
			}
		}
	}
}


Return current item: DIR