com.neolao.system.FolderUtils

Méthodes statiques liées aux dossiers.

Exemple

// listing
$maListe = FolderUtils::listing("home/www");
echo "Le type de mon élément est: ".$maListe[0]["type"];
echo "Le nom de mon élément est: ".$maListe[0]["name"];
echo "Le nom sans majuscule de mon élément est: ".$maListe[0]["nameSort"];

Méthodes

Visibilité Nom Param 1 Param 2 Param 3 Description
static public listing string $path Liste les fichiers d'un dossier
static public delete string $path Efface un dossier et tout son contenu
static public size string $path bool $recursive Récupère la taille du dossier
static public copy string $source string $destination string $type Copie le contenu d'un dossier dans un autre

Change log

[03/03/2005] Version 1.0

Ajout de la méthode listing

[05/03/2005] Version 1.1

Ajout de la méthode delete

[06/03/2005] Version 1.2

Ajout de la méthode size

[10/03/2005] Version 1.3

Ajout de la méthode copy

[30/03/2005] Version 1.4

Modification de la méthode copy. La copie de sous répertoire était buggée.

[08/04/2005] Version 1.5

Modification de la méthode copy. La copie de sous répertoire était buggée (encore).

Source

/**
 * Méthodes static liées aux dossiers
 * @package		com.neolao
 * @subpackage		system
 * @author		neolao <neo@neolao.com>
 * @version		1.5 (08/04/2005)
 * @link		http://resources.neolao.com/php/classes/system/FolderUtils
 */
class FolderUtils {
	// ----------------------------- CONSTANTES --------------------------------
 
	// ----------------------------- VARIABLES ---------------------------------
 
	/*=========================== METHODES PRIVEES ===========================*/
	/*========================================================================*/
 
	/*===================== FIN = METHODES PRIVEES = FIN =====================*/
	/*========================================================================*/
 
	/*============================ GETTER  SETTER ============================*/
	/*========================================================================*/
 
	/*====================== FIN = GETTER  SETTER = FIN ======================*/
	/*========================================================================*/
 
	/*========================== METHODES PUBLIQUES ==========================*/
	/*========================================================================*/
	/**
	 * Liste les fichiers d'un dossier
	 * 
	 * @param string $path Le chemin du dossier que l'on veut explorer
	 * @return array La liste des fichiers du dossier, sinon false
	 */
	static public function listing($path){
		// $root = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], "/")+1);
		// $folderResource; // La ressource du dossier à explorer
		// $fileName; // Le nom d'un fichier
		// $result; // La liste des fichiers trouvés dans le dossier
 
		// Si le chemin du dossier ne se termine pas par un slash, on l'ajoute
		if(substr($path, -1) != "/"){
			$path .= "/";
		}
 
		$folderResource = @opendir($path);
		if($folderResource !== false){
			// L'ouverture du dossier a réussi
 
			$result = array();
			$i = 0;
			while (($fileName = readdir($folderResource)) !== false){
				$result[$i] = array();
				$result[$i]["type"] = filetype($path.$fileName);
				$result[$i]["nameSort"] = strtolower($fileName);
				$result[$i]["name"] = $fileName;
				$i++;
			}
			closedir($folderResource);
			sort($result);
 
			return $result;
		}
		return false;
	}
	/**
	 * Efface un dossier et tout son contenu
	 * @param string $path Le chemin du dossier que l'on veut supprimer
	 * @return bool true si l'opération a réussi, sinon false
	 */
	static public function delete($path){
		if(!is_dir($path)){
			return false;
		}else{
			$path = realpath($path);
		}
		$folder = opendir($path);
		$skip = array(".", "..");
		while($file = readdir($folder)){ 
			if (!in_array( $file, $skip)){ 
				if (is_dir($path."/".$file)){ 
					self::delete("$path/$file"); 
				} else { 
					if(!unlink("$path/$file")){
						return false;
					}  
				} 
			} 
		} 
		@closedir($folder); 
 
		if(!rmdir($path)){
			return false;
		}else{
			return true;
		}
	}
	/**
	 * Récupère la taille du dossier
	 * @param string $path Le chemin du dossier
	 * @param bool $recursive Indique s'il faut regarder dans les sous dossiers
	 * @return int La taille du dossier en octect
	 */
	static public function size($path , $recursive=TRUE){ 
		$path = realpath($path);
		$result = 0; 
		if(!is_dir($path) || !is_readable($path)){
			return 0;
		} 
		$fd = dir($path); 
		while($file = $fd->read()){ 
			if(($file != ".") && ($file != "..")){ 
				if(@is_dir("$path/$file")){ 
					$result += $recursive?self::size("$path/$file"):0; 
				}else{  
					$result += filesize("$path/$file"); 
				}
			} 
		} 
		$fd->close(); 
		return $result; 
	}
	/**
	 * Copie le contenu d'un dossier dans un autre
	 * @param string $source Le chemin du dossier source
	 * @param string $destination Le chemin du dossier destination
	 * @param string $type Les extensions à copier, séparées par des ",", sinon "*" pour tout copier
	 * @return bool true si l'opération s'est bien passée, sinon false
	 */
	static public function copy($source , $destination, $type="*"){ 
		$sourcePath = realpath($source);
		$destPath = realpath($destination);
		$listType = split(",", $type);
 
		if(!is_dir($sourcePath) || !is_readable($sourcePath) || !is_dir($destPath) || !is_readable($destPath)){
			return false;
		} 
		$fd = dir($sourcePath); 
		while($file = $fd->read()){ 
			if(($file != ".") && ($file != "..")){ 
				if(is_dir("$sourcePath/$file")){ 
					if(!is_dir("$destPath/$file")){
						mkdir("$destPath/$file");
					}
					if(!self::copy("$sourcePath/$file", "$destPath/$file", $type)){
						return false;
					} 
				}else{
					$fileInfo = pathinfo("$sourcePath/$file");
 
					if($type === "*" || in_array($fileInfo["extension"], $listType)){
						if(!@copy("$sourcePath/$file", "$destPath/$file")){
							return false;
						} 
					}
				}
			} 
		} 
		$fd->close(); 
 
		return true; 
	}
	/*==================== FIN = METHODES PUBLIQUES = FIN ====================*/
	/*========================================================================*/
}