分享

PHP常用类库:PHP文件系统操作类SimFile.class.php

 Alkaid2015 2013-11-03
PHP常用类库:PHP文件系统操作类SimFile.class.php

PHP文件系统操作类,封装了PHP中FileSystem中的常用函数,并做了一些优化。

主要功能:

每个功能对应一个方法,主要方法如下:

1.

* 把文件读入数组(一行为一个元素)
* 1.去掉每行末的换行符。
* 2.可以设置是否过滤空行

2.

* 读取文件为字符串

3.

* 将字符串写入文件

4.

* 读取数组文件,返回一个数组

5.

* 将一个数组写入文件

6.

* 创建目录
* 1.递归创建多级目录
* 2.同时创建多个目录

7.

* 删除目录和文件
* 1.可以删除文件和目录
* 2.判断目录和文件是否存在,存在进行删除。
* 3.递归删除目录及止内所有文件和文件夹。

8.

* 递归列出目录下的所有子目录和文件

9.

* 递归列出目录下的所有子目录

10.

* 递归列出目录下的所有文件

11.

* 递归列出目录下的所有子目录和文件
* 返回以子目录为键,子目录下所有文件的数组为值的数组

12.

* 获取文件夹大小

13.

* 自动转换文件大小值为合适的单位(四舍五入)


完整源码:

<?php
/**
 * Sim, Simple library simplify our PHP development.
 * 使用简单、简洁的类库,简化我们的PHP开发。
 *
 * @author 雨中歌者 http://weibo.com/esinger (新浪微博)
 * @link /link.php?url=http://blog.csdn.net/esinger (技术博客)
 * @license http://www./licenses/LICENSE-2.0
 */

/**
 * 文件系统操作类
 *
 * @author 雨中歌者
 * @version 1.0
 */
class SimFile {
	/**
	 * 构造函数
	 * 防止实例化
	 */
	public function __construct() {
		return;
	}
	
	/**
	 * 把文件读入数组(一行为一个元素)
	 * 1.去掉每行末的换行符。
	 * 2.可以设置是否过滤空行。
	 *
	 * @access public
	 * @param string $filename
	 * @param boolean $skip_empty_lines 是否过滤空行
	 * @return array
	 */
	public static function file($filename, $skip_empty_lines = false) {
		if ($skip_empty_lines) {
			return file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
		} else {
			return file($filename, FILE_IGNORE_NEW_LINES);
		}
	}
	
	/**
	 * 读取文件为字符串
	 *
	 * @access public
	 * @param string $filename
	 * @return boolean string
	 */
	public static function read($filename) {
		return is_file($filename) ? file_get_contents($filename) : false;
	}
	
	/**
	 * 将字符串写入文件
	 *
	 * @access public
	 * @param string $filename
	 * @param string $data
	 * @return number
	 */
	public static function write($filename, $data) {
		$dirname = dirname($filename);
		self::mkdir($dirname);
		return file_put_contents($filename, $data);
	}
	
	/**
	 * 读取文件为一个数组
	 *
	 * @access public
	 * @param string $filename
	 * @return array 文件不存在或读取失败,返回空数组
	 */
	public static function readArray($filename) {
		$data = is_file($filename) ? file_get_contents($filename) : false;
		$data = unserialize($data);
		return is_array($data) ? $data : array();
	}
	
	/**
	 * 将一个数组写入文件
	 *
	 * @access public
	 * @param string $filename
	 * @param array $array
	 * @return array 返回写入的数组
	 */
	public static function writeArray($filename, $array) {
		self::write($filename, serialize($array));
		return $array;
	}
	
	/**
	 * 创建目录
	 * 1.递归创建多级目录
	 * 2.同时创建多个目录
	 *
	 * @param string|array $dirname
	 * @param number $mode
	 * @param boolean $recursive
	 */
	public static function mkdir($dirname, $mode = 0777, $recursive = true) {
		if (is_string($dirname) || is_numeric($dirname)) {
			if (!is_dir($dirname)) {
				return mkdir($dirname, $mode, $recursive);
			}
		} elseif (is_array($dirname)) {
			foreach ($dirname as $dir) {
				is_dir($dir) or mkdir($dir, $mode, $recursive);
			}
		}
		return false;
	}
	
	/**
	 * 删除目录和文件
	 * 1.可以删除文件和目录
	 * 2.判断目录和文件是否存在,存在进行删除。
	 * 3.递归删除目录及止内所有文件和文件夹
	 *
	 * @access public
	 * @param string $filename
	 */
	public static function delete($filename) {
		$filename = rtrim($filename, '/\\');
		if (is_dir($filename)) {
			if (($dh = @opendir($filename)) !== false) {
				while (false !== ($file = readdir($dh))) {
					if ($file != "." && $file != "..") {
						$path = $filename . '/' . $file;
						is_dir($path) ? self::delete($path) : @unlink($path);
					}
				}
				closedir($dh);
			}
			rmdir($filename);
		} else {
			unlink($filename);
		}
	}
	
	/**
	 * 递归列出目录下的所有子目录和文件
	 *
	 * @access public
	 * @param string $dirname
	 * @return array 成功返回包含所有子目录和文件的一维数组。失败返回空数组。
	 */
	public static function getSub($dirname) {
		$dirname = rtrim($dirname, '/\\');
		$ret = array();
		if (is_dir($dirname)) {
			if (($dh = @opendir($dirname)) !== false) {
				while (($file = readdir($dh)) !== false) {
					if ($file != '.' && $file != '..') {
						$path = $dirname . DIRECTORY_SEPARATOR . $file;
						$ret[] = $path;
						is_dir($path) && $ret = array_merge($ret, self::getSub($path));
					}
				}
				closedir($dh);
			}
		}
		return $ret;
	}
	
	/**
	 * 递归列出目录下的所有子目录
	 *
	 * @access public
	 * @param string $dirname
	 * @return array 成功返回包含所有子目录的一维数组。失败返回空数组。
	 */
	public static function getSubDir($dirname) {
		$dirname = rtrim($dirname, '/\\');
		$ret = array();
		if (is_dir($dirname)) {
			if (($dh = @opendir($dirname)) !== false) {
				while (($file = readdir($dh)) !== false) {
					if ($file != '.' && $file != '..') {
						$path = $dirname . DIRECTORY_SEPARATOR . $file;
						if (is_dir($path)) {
							$ret[] = $path;
							$ret = array_merge($ret, self::getSubDir($path));
						}
					}
				}
				closedir($dh);
			}
		}
		return $ret;
	}
	
	/**
	 * 递归列出目录下的所有文件
	 *
	 * @access public
	 * @param string $dirname
	 * @return array 成功返回包含所有文件的一维数组。失败返回空数组。
	 */
	public static function getSubFile($dirname) {
		$dirname = rtrim($dirname, '/\\');
		$ret = array();
		if (is_dir($dirname)) {
			if (($dh = @opendir($dirname)) !== false) {
				while (($file = readdir($dh)) !== false) {
					if ($file != '.' && $file != '..') {
						$path = $dirname . DIRECTORY_SEPARATOR . $file;
						if (is_dir($path)) {
							$ret = array_merge($ret, self::getSubFile($path));
						} else {
							$ret[] = $path;
						}
					}
				}
				closedir($dh);
			}
		}
		return $ret;
	}
	
	/**
	 * 递归列出目录下的所有子目录和文件
	 *
	 * @access public
	 * @param string $dirname
	 * @return array 成功返回以子目录为键,子目录下所有文件的数组为值的数组,失败返回空数组。
	 */
	public static function getSubAsKV($dirname) {
		$dirname = rtrim($dirname, '/\\');
		$ret = array();
		if (is_dir($dirname)) {
			if (($dh = @opendir($dirname)) !== false) {
				while (false !== ($file = readdir($dh))) {
					if ($file != "." && $file != "..") {
						$path = $dirname . DIRECTORY_SEPARATOR . $file;
						is_dir($path) ? $ret[$path] = self::getSub($path) : $ret[] = $path;
					}
				}
				closedir($dh);
			}
		}
		return $ret;
	}
	
	/**
	 * 获取文件夹大小
	 *
	 * @access public
	 * @param string $dirname
	 * @return number 返回文件夹大小(单位为字节)。
	 */
	public static function getDirSize($dirname) {
		$dirname = rtrim($dirname, '/\\');
		$size = 0;
		if (is_dir($dirname)) {
			if (($dh = @opendir($dirname)) !== false) {
				while (($file = readdir($dh)) !== false) {
					if ($file != '.' && $file != '..') {
						$file = $dirname . DIRECTORY_SEPARATOR . $file;
						$size += is_dir($file) ? self::getDirSize($file) : filesize($file);
					}
				}
				closedir($dh);
			}
		}
		return $size;
	}
	
	/**
	 * 获取自动转换单位的文件大小值(四舍五入)
	 *
	 * @access public
	 * @param float $byte
	 * @param integer $precision 精度
	 * @return string
	 */
	public static function getAutoSize($byte, $precision = 2) {
		$kb = 1024;
		$mb = $kb * 1024;
		$gb = $mb * 1024;
		$tb = $gb * 1024;
		if ($byte < $kb) {
			return $byte . ' B';
		} elseif ($byte < $mb) {
			return round($byte / $kb, $precision) . ' KB';
		} elseif ($byte < $gb) {
			return round($byte / $mb, $precision) . ' MB';
		} elseif ($byte < $tb) {
			return round($byte / $gb, $precision) . ' GB';
		} else {
			return round($byte / $tb, $precision) . ' TB';
		}
	}
}
 
 // End of file SimFile.class.php


作者:esinger 发表于2013-4-25 11:17:45 原文链接

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多