|
PHP常用類庫:PHP文件系統(tǒng)操作類SimFile.class.php
PHP文件系統(tǒng)操作類,封裝了PHP中FileSystem中的常用函數(shù),并做了一些優(yōu)化。 主要功能: 每個功能對應一個方法,主要方法如下: 1. * 把文件讀入數(shù)組(一行為一個元素) 2. * 讀取文件為字符串 3. * 將字符串寫入文件 4. * 讀取數(shù)組文件,返回一個數(shù)組 5. * 將一個數(shù)組寫入文件 6. * 創(chuàng)建目錄 7. * 刪除目錄和文件 8. * 遞歸列出目錄下的所有子目錄和文件 9. * 遞歸列出目錄下的所有子目錄 10. * 遞歸列出目錄下的所有文件 11. * 遞歸列出目錄下的所有子目錄和文件 12. * 獲取文件夾大小 13. * 自動轉(zhuǎn)換文件大小值為合適的單位(四舍五入) 完整源碼: <?php
/**
* Sim, Simple library simplify our PHP development.
* 使用簡單、簡潔的類庫,簡化我們的PHP開發(fā)。
*
* @author 雨中歌者 http://weibo.com/esinger (新浪微博)
* @link /link.php?url=http://blog.csdn.net/esinger (技術(shù)博客)
* @license http://www./licenses/LICENSE-2.0
*/
/**
* 文件系統(tǒng)操作類
*
* @author 雨中歌者
* @version 1.0
*/
class SimFile {
/**
* 構(gòu)造函數(shù)
* 防止實例化
*/
public function __construct() {
return;
}
/**
* 把文件讀入數(shù)組(一行為一個元素)
* 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);
}
/**
* 讀取文件為一個數(shù)組
*
* @access public
* @param string $filename
* @return array 文件不存在或讀取失敗,返回空數(shù)組
*/
public static function readArray($filename) {
$data = is_file($filename) ? file_get_contents($filename) : false;
$data = unserialize($data);
return is_array($data) ? $data : array();
}
/**
* 將一個數(shù)組寫入文件
*
* @access public
* @param string $filename
* @param array $array
* @return array 返回寫入的數(shù)組
*/
public static function writeArray($filename, $array) {
self::write($filename, serialize($array));
return $array;
}
/**
* 創(chuàng)建目錄
* 1.遞歸創(chuàng)建多級目錄
* 2.同時創(chuàng)建多個目錄
*
* @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.遞歸刪除目錄及止內(nèi)所有文件和文件夾
*
* @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 成功返回包含所有子目錄和文件的一維數(shù)組。失敗返回空數(shù)組。
*/
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 成功返回包含所有子目錄的一維數(shù)組。失敗返回空數(shù)組。
*/
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 成功返回包含所有文件的一維數(shù)組。失敗返回空數(shù)組。
*/
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 成功返回以子目錄為鍵,子目錄下所有文件的數(shù)組為值的數(shù)組,失敗返回空數(shù)組。
*/
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 返回文件夾大小(單位為字節(jié))。
*/
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;
}
/**
* 獲取自動轉(zhuǎn)換單位的文件大小值(四舍五入)
*
* @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 發(fā)表于2013-4-25 11:17:45 原文鏈接 |
|
|
來自: Alkaid2015 > 《74.PHP》