<?php
/*******************************************************************
 * 版权协议：2009-2019
 * 版权所有: PHP-北京金南曦网络技术有限公司旗下PHPWMS，PHP商城系统技术支持中心http://www.php188.net，并保留所有权利。 
* PHP商城系统网址: http://www.php188.com
 * PHPWMS系统网址：http://www.phpwms.com
 * 销售电话：010-87875088
 * 销售电话：010-87875188 
*------------------------------------------------------------------
 * 这不是一个完全免费软件！您只能在不用于商业目的的前提下对程序代码进
 * 行修改和使用；不允许对程序代码以任何形式任何目的的再发布。
 *------------------------------------------------------------------
 * 文件名称：csl.file_system.php
 * 摘    要：文件系统类
 * 适用范围：PHPWMS 1.0
 * 版    本：1.0
 *------------------------------------------------------------------
 * Script Written By phpwms项目组
 * 最后更新： 2009-09-24 phpwms 由PHP金南曦网络技术有限公司整理发布
 *******************************************************************/

	class FileSystem {
		public function __construct() {

		}

		/*
		 * 递归目录 
		 *
		 * @param string $dir 目录
		 * @param callback $callback 递归的回调函数
		 * @param boolean $removeDir 递归时是否删除空目录
		 * @param boolean $recurive 是否递归
		 */
		public function recursiveDir($dir, $callback, $removeDir=false, $recursive=true) {
			if(!is_dir($dir))
				throw new Exception("$dir 不是目录");
			if(!$dh = opendir($dir))
				throw new Exception("不能打开目录 $dir");
			$res = array();
			while(($file = readdir($dh)) !== false)	{
				if($file == "." || $file == "..") continue;
				$filePath = $dir . "/" . $file;

				if(is_dir($filePath)) { //为目录,递归删除
					if($recursive)
						$res[$file] = self::recursiveDir($filePath, $callback, $removeDir, true);
					else
						$res[] = call_user_func($callback, $filePath);
				} else { //为文件,直接删除
					$res[] = call_user_func($callback, $filePath);
				}
			}
			//文件删除完成,删除该目录
			closedir($dh);
			if($removeDir)
				@rmdir($dir);
			return $res;
		}

		/*
		 * 删除目录下所有文件及子目录
		 *
		 * @param $dir 目录
		 */
		public function removeDir($dir) 
		{
			$callback = create_function('$file','return @unlink($file);');
			return self::recursiveDir($dir, $callback, true);
		}

		/*
		 * 列出目录下所有文件及子目录名称
		 *
		 * @param string $dir 目录名称
		 * @param boolean $recursive是否递归
		 */
		function listDir($dir, $recursive=false) 
		{
			$callback = create_function('$file','return basename($file);');
			return self::recursiveDir($dir, $callback, false, $recursive);
		}

		/*
		 * 建立目录 
		 *
		 * @param string $dir 目录的路径
		 * @param boolean $recursive是否递归
		 */
		function mkdir($dir, $recursive=true)
		{
			if(!is_dir($dir)) {
				if($recursive)
					self::mkdir(dirname($dir));
				if(!@mkdir($dir))
					throw new Exception(__CLASS__."->".__METHOD__.":创建目录 $dir 失败，检查是否有权限.");
			}
		}
		
		// 创建无极目录
		public function createdir($dir) {
			$dir = str_replace(array('//','\\','\\\\'),'/',$dir);
			if (!is_dir($dir)) {
				$temp = explode('/',$dir);
				$cur_dir = '';
				for($i=0;$i < count($temp);$i++) {
					$cur_dir .= $temp[$i].'/';
					if (!is_dir($cur_dir)) {
						if(!@mkdir($cur_dir,0777)) {
							throw new Exception(__CLASS__."->".__METHOD__.":创建目录 $cur_dir 失败，检查是否有权限.");
						}
					} 
				}
			}
		}

	}
?>