日期:2014-05-17  浏览次数:20612 次

php文件目录操作类
<?php
/**
 * 文件目录操作类
 *
 * 例子:
 * $fileutil = new fileDirUtil();
 * $fileutil->createDir('a/1/2/3');                 测试建立文件夹  建一个a/1/2/3文件夹
 * $fileutil->createFile('b/1/2/3');                测试建立文件    在b/1/2/文件夹下面建一个3文件
 * $fileutil->createFile('b/1/2/3.txt');            测试建立文件    在b/1/2/文件夹下面建一个3.exe文件
 * $fileutil->writeFile('b/1/2/3.txt','this is something i write!');    在文件中写内容
 * $arr = $fileutil->readFile2array('example/mysql.txt');
 * $arr = $fileutil->readsFile('example/mysql.txt');
 * $size=$fileutil->bitSize($fileutil->getDirSize("example"));      得到文件或目录的大小
 * $fileutil->copyDir('b','d/e');                   测试复制文件夹  建立一个d/e文件夹,把b文件夹下的内容复制进去
 * $fileutil->copyFile('b/1/2/3.exe','b/b/3.exe');  测试复制文件    建立一个b/b文件夹,并把b/1/2文件夹中的3.exe文件复制进去
 * $fileutil->moveDir('a/','b/c');                  测试移动文件夹  建立一个b/c文件夹,并把a文件夹下的内容移动进去,并删除a文件夹
 * $fileutil->moveFile('b/1/2/3.exe','b/d/3.exe');  测试移动文件    建立一个b/d文件夹,并把b/1/2中的3.exe移动进去          
 * $fileutil->unlinkFile('b/d/3.exe');              测试删除文件    删除b/d/3.exe文件
 * $fileutil->unlinkDir('d');                       测试删除文件夹  删除d文件夹	
 * $list = $fileutil->dirList("E:\example");        测试列表文件夹  列出目录下所有文件
 * $list = $fileutil->dirTree("/");                 测试列表文件夹树  列出目录下所有文件直接直接的树关系
 */
class fileDirUtil {
	/**
	 * 建立文件夹
	 *
	 * @param  string $aimUrl
	 * @return  viod
	 */
	function createDir($aimUrl, $mode = 0777) {
		$aimUrl = str_replace ( '', '/', $aimUrl );
		$aimDir = '';
		$arr = explode ( '/', $aimUrl );
		foreach ( $arr as $str ) {
			$aimDir .= $str . '/';
			if (! file_exists ( $aimDir )) {
				mkdir ( $aimDir, $mode );
			}
		}
	}
	/**
	 * 建立文件
	 *
	 * @param  string  $aimUrl
	 * @param  boolean  $overWrite 该参数控制是否覆盖原文件
	 * @return  boolean
	 */
	function createFile($aimUrl, $overWrite = false) {
		if (file_exists ( $aimUrl ) && $overWrite == false) {
			return false;
		} elseif (file_exists ( $aimUrl ) && $overWrite == true) {
			$this->unlinkFile ( $aimUrl );
		}
		$aimDir = dirname ( $aimUrl );
		$this->createDir ( $aimDir );
		touch ( $aimUrl );
		return true;
	}
	/**
	 * 移动文件夹
	 *
	 * @param  string  $oldDir
	 * @param  string  $aimDir
	 * @param  boolean  $overWrite 该参数控制是否覆盖原文件
	 * @return  boolean
	 */
	function moveDir($oldDir, $aimDir, $overWrite = false) {
		$aimDir = str_replace ( '', '/', $aimDir );
		$aimDir = substr ( $aimDir, - 1 ) == '/' ? $aimDir : $aimDir . '/';
		$oldDir = str_replace ( '', '/', $oldDir );
		$oldDir = substr ( $oldDir, - 1 ) == '/' ? $oldDir : $oldDir . '/';
		if (! is_dir ( $oldDir )) {
			return false;
		}
		if (! file_exists ( $aimDir )) {
			$this->createDir ( $aimDir );
		}
		@$dirHandle = opendir ( $oldDir );
		if (! $dirHandle) {
			return false;
		}
		while ( false !== ($file = readdir ( $dirHandle )) ) {
			if ($file == '.' || $file == '..') {
				continue;
			}
			if (! is_dir ( $oldDir . $file )) {
				$this->moveFile ( $oldDir . $file, $aimDir . $file, $overWrite );
			} else {
				$this->moveDir ( $oldDir . $file, $aimDir . $file, $overWrite );
			}
		}
		closedir ( $dirHandle );
		return rmdir ( $oldDir );
	}
	/**
	 * 移动文件
	 *
	 * @param  string  $fileUrl
	 * @param  string  $aimUrl
	 * @param  boolean  $overWrite 该参数控制是否覆盖原文件
	 * @return  boolean
	 */
	function moveFile($fileUrl, $aimUrl, $overWrite = false) {
		if (! file_exists ( $fileUrl )) {
			return false;
		}
		if (file_exists ( $aimUrl ) && $overWrite = false) {
			return false;
		} elseif (file_exists ( $aimUrl ) && $overWrite = true) {
			$this->unlinkFile ( $aimUrl );
		}
		$aimDir = dirname ( $aimUrl );
		$this->createDir ( $aimDir );
		rename ( $fileUrl, $aimUrl );
		return true;
	}
	/**
	 * 删除文件夹
	 *
	 * @param  string  $aimDir
	 * @return  boolean
	 */
	function unlinkDir($aimDir) {
		$aimDir = str_replace ( '', '/', $aimDir );
		$aimDir = substr ( $aimDir, - 1 ) == '/' ? $aimDir : $aimDir . '/';