PHP常用類庫:PHP文件系統(tǒng)操作類SimFile.class.php
PHP文件系統(tǒng)操作類,封裝了PHP中FileSystem中的常用函數(shù),并做了一些優(yōu)化。 主要功能: 每個功能對應(yīng)一個方法,主要方法如下: 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ù) * 防止實(shí)例化 */ public function __construct() { return; } /** * 把文件讀入數(shù)組(一行為一個元素) * 1.去掉每行末的換行符。 * 2.可以設(shè)置是否過濾空行。 * * @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.同時(shí)創(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.判斷目錄和文件是否存在,存在進(jìn)行刪除。 * 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 原文鏈接 |
|