分享一单例模式的文件操作类
来源:互联网 发布:kbar软件下载 编辑:程序博客网 时间:2024/05/02 01:58
<?phpnamespace yii\file;use common\components\Validate;/** * @Description 文件操作类 * @author qq:274501366 * @date : 01-11 */class File { /** * 转化 \ 为 / * * @paramstring$path路径 * @returnstring路径 */ private static $_instance; private function __construct() { } //单例方法,用于访问实例的公共的静态方法 public static function getInstance() { if (!(self::$_instance instanceof self)) { self::$_instance = new self(); } return self::$_instance; } public function dir_path($path) { $path = str_replace('\\', '/', $path); if (substr($path, -1) != '/') $path = $path . '/'; return $path; } /** * 判断是否为目录 */ public function is_dir($path) { return is_dir($path); } /** * 判断文件可写 */ public function is_writable($path){ return is_writable($path); } /** * 判断文件或目录是否存在 */ public function file_exists($path){ return file_exists($path); } /** * 判断文件可读 */ public function is_readable($path){ return is_readable($path); } /** * 创建目录 * * @paramstring$path路径 * @paramstring$mode属性 * @returnstring如果已经存在则返回true,否则为flase */ public function dir_create($path, $mode = 0777) { if (is_dir($path)) return TRUE; $ftp_enable = 0; $path = self::dir_path($path); $temp = explode('/', $path); $cur_dir = ''; $max = count($temp) - 1; for ($i = 0; $i < $max; $i++) { $cur_dir .= $temp[$i] . '/'; if (@is_dir($cur_dir)) continue; @mkdir($cur_dir, 0777, true); @chmod($cur_dir, 0777); } return is_dir($path); } /** * 拷贝目录及下面所有文件 * * @paramstring$fromdir原路径 * @paramstring$todir目标路径 * @returnstring如果目标路径不存在则返回false,否则为true */ public function dir_copy($fromdir, $todir) { $fromdir = self::dir_path($fromdir); $todir = self::dir_path($todir); if (!is_dir($fromdir)) return FALSE; if (!is_dir($todir)) self::dir_create($todir); $list = glob($fromdir . '*'); if (!empty($list)) { foreach ($list as $v) { $path = $todir . basename($v); if (is_dir($v)) { self::dir_copy($v, $path); } else { copy($v, $path); @chmod($path, 0777); } } } return TRUE; } /** * 转换目录下面的所有文件编码格式 * * @paramstring$in_charset原字符集 * @paramstring$out_charset目标字符集 * @paramstring$dir目录地址 * @paramstring$fileexts转换的文件格式 * @returnstring如果原字符集和目标字符集相同则返回false,否则为true */ public function dir_iconv($in_charset, $out_charset, $dir, $fileexts = 'php|html|htm|shtml|shtm|js|txt|xml') { if ($in_charset == $out_charset) return false; $list = dir_list($dir); foreach ($list as $v) { if (pathinfo($v, PATHINFO_EXTENSION) == $fileexts && is_file($v)) { file_put_contents($v, iconv($in_charset, $out_charset, file_get_contents($v))); } } return true; } /** * 列出目录下所有文件 * * @paramstring$path路径 * @paramstring$exts扩展名 * @paramarray$list增加的文件列表 * @returnarray所有满足条件的文件 */ public function dir_list($path, $exts = '', $list = array()) { $path = self::dir_path($path); $files = glob($path . '*'); foreach ($files as $v) { if (!$exts || pathinfo($v, PATHINFO_EXTENSION) == $exts) { $list[] = $v; if (is_dir($v)) { $list = self::dir_list($v, $exts, $list); } } } return $list; } //某个文件夹下的子文件 public function getFileList($dirName, $exts = '', $list = array()) { $tree = ''; if (is_dir($dirName)) {//是否目录 if ($dh = opendir($dirName)) { //打开 while (($file = readdir($dh)) !== false) { //readdir成功,则返回一个文件名,否则返回 false。 if ($file != "." && $file != "..") { $filePath = $dirName . DIRECTORY_SEPARATOR . $file; $tree[] = $file; //$tree[$file]['updatime'] = self::updateFiletime($filePath); } } closedir($dh); } else { return FALSE; } return $tree; } else { return FALSE; } } //文件修改时间 public function updateFiletime($path){ if(file_exists($path)){ return filemtime($path); } } //返回目录 public function getSubDirs($dirName) { $tree = ''; if (is_dir($dirName)) {//是否目录 if ($dh = opendir($dirName)) { //打开 while (($file = readdir($dh)) !== false) { //readdir成功,则返回一个文件名,否则返回 false。 if ($file != "." && $file != "..") { $filePath = $dirName . DIRECTORY_SEPARATOR . $file; if (is_dir($filePath)) { //$tree[$file]['zi'] = self::getSubDirs($filePath); $tree[$file]['path'] = $filePath; } } } closedir($dh); } else { return FALSE; } //返回当前的$tree return $tree; } else { return FALSE; } } public function fileDigui($data) { $html = ''; foreach ($data as $key => $value) { $html .= "<li><a class='diguiula diguiula_".$key."' data='" . str_replace('\\', '/', $value['path']) . "'>" . $key . "</a>";// if (is_array($value['zi'])) {// $html .= self::fileDigui($value['zi']);// } $html = $html . "</li>"; } return "<ul class='digui'>" . $html . "</ul>"; } /** * 设置目录下面的所有文件的访问和修改时间 * * @paramstring$path路径 * @paramint$mtime修改时间 * @paramint$atime访问时间 * @returnarray不是目录时返回false,否则返回 true */ public function dir_touch($path, $mtime = TIME, $atime = TIME) { if (!is_dir($path)) return false; $path = dir_path($path); if (!is_dir($path)) touch($path, $mtime, $atime); $files = glob($path . '*'); foreach ($files as $v) { is_dir($v) ? dir_touch($v, $mtime, $atime) : touch($v, $mtime, $atime); } return true; } /** * 目录列表 * * @paramstring$dir路径 * @paramint$parentid父id * @paramarray$dirs传入的目录 * @returnarray返回目录列表 */ public function dir_tree($dir, $parentid = 0, $dirs = array()) { global $id; if ($parentid == 0) $id = 0; $list = glob($dir . '*'); foreach ($list as $v) { if (is_dir($v)) { $id++; $dirs[$id] = array('id' => $id, 'parentid' => $parentid, 'name' => basename($v), 'dir' => $v . '/'); $dirs = self::dir_tree($v . '/', $id, $dirs); } } return $dirs; } /** * 删除目录及目录下面的所有文件 * * @paramstring$dir路径 * @returnbool如果成功则返回 TRUE,失败则返回 FALSE */ public function dir_delete($dir) { $dir = self::dir_path($dir); if (!is_dir($dir)) return FALSE; $list = glob($dir . '*'); foreach ($list as $v) { is_dir($v) ? self::dir_delete($v) : @unlink($v); } return @rmdir($dir); } /** * 重命名 */ public function dir_update($olddir, $dir) { if (file_exists($olddir)) { return rename($olddir, $dir); } } /** * 移动文件夹 * * @param string $oldDir * @param string $aimDir * @param boolean $overWrite 该参数控制是否覆盖原文件 * @return boolean * 使用说明:moveDir('a/','b/c'); 测试移动文件夹 建立一个b/c文件夹,并把a文件夹下的内容移动进去,并删除a文件夹 */ public 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)) { self :: dir_create($aimDir); } @ $dirHandle = opendir($oldDir); if (!$dirHandle) { return false; } while (false !== ($file = readdir($dirHandle))) { if ($file == '.' || $file == '..') { continue; } if (!is_dir($oldDir . $file)) { self :: moveFile($oldDir . $file, $aimDir . $file, $overWrite); } else { self :: moveDir($oldDir . $file, $aimDir . $file, $overWrite); } } closedir($dirHandle); return rmdir($oldDir); } /** * 移动文件 * * @param string $fileUrl * @param string $aimUrl * @param boolean $overWrite 该参数控制是否覆盖原文件 * @return boolean * 使用说明 moveFile('b/1/2/3.exe','b/d/3.exe'); 测试移动文件 建立一个b/d文件夹,并把b/1/2中的3.exe移动进去 */ public 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) { self :: dir_delete($aimUrl); } $aimDir = dirname($aimUrl); self :: dir_create($aimDir); rename($fileUrl, $aimUrl); return true; } /** * 删除单个图片 */ public function dir_unlink($dir) { if (file_exists($dir)) { return unlink($dir); } } /** * 当前目录的上级目录 */ public function dir_superior($dir) { if (file_exists($dir)) { $dir = substr($dir, 0, -1); $dir_array = explode(DIRECTORY_SEPARATOR, $dir); $dir_array ? array_pop($dir_array) : 1; $dire = implode(DIRECTORY_SEPARATOR, $dir_array); return $dire . DIRECTORY_SEPARATOR; } } /* * ******************** * @file - path to zip file 需要解压的文件的路径 * @destination - destination directory for unzipped files 解压之后存放的路径 * @需要使用 ZZIPlib library ,请确认该扩展已经开启 */ public function unzip_file($filename, $path) { //先判断待解压的文件是否存在 if (!file_exists($filename)) { die("文件 $filename 不存在!"); } $starttime = explode(' ', microtime()); //解压开始的时间 //将文件名和路径转成windows系统默认的gb2312编码,否则将会读取不到 $filename = iconv("utf-8", "gb2312", $filename); $path = iconv("utf-8", "gb2312", $path); //打开压缩包 $resource = zip_open($filename); $i = 1; //遍历读取压缩包里面的一个个文件 while ($dir_resource = zip_read($resource)) { //如果能打开则继续 if (zip_entry_open($resource, $dir_resource)) { //获取当前项目的名称,即压缩包里面当前对应的文件名 $file_name = $path . zip_entry_name($dir_resource); //以最后一个“/”分割,再用字符串截取出路径部分 $file_path = substr($file_name, 0, strrpos($file_name, "/")); //如果路径不存在,则创建一个目录,true表示可以创建多级目录 if (!is_dir($file_path)) { mkdir($file_path, 0777, true); } //如果不是目录,则写入文件 if (!is_dir($file_name)) { //读取这个文件 $file_size = zip_entry_filesize($dir_resource); //最大读取6M,如果文件过大,跳过解压,继续下一个 if ($file_size < (1024 * 1024 * 6)) { $file_content = zip_entry_read($dir_resource, $file_size); file_put_contents($file_name, $file_content); } else { echo "<p> " . $i++ . " 此文件已被跳过,原因:文件过大, -> " . iconv("gb2312", "utf-8", $file_name) . " </p>"; } } //关闭当前 zip_entry_close($dir_resource); } } //关闭压缩包 zip_close($resource); $endtime = explode(' ', microtime()); //解压结束的时间 $thistime = $endtime[0] + $endtime[1] - ($starttime[0] + $starttime[1]); $thistime = round($thistime, 3); //保留3为小数 echo "<p>解压完毕!,本次解压花费:$thistime 秒。</p>"; } /** * 读取xml、html等内容,存为字符串 */ public function curlRead($url) { //curl取// if( ! Validate::isUrl($url)){// return FALSE;// }// $ch = curl_init();// //2.设置URL和相应的选项// curl_setopt($ch, CURLOPT_URL, $url);// curl_setopt($ch, CURLOPT_HEADER, 0);// curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// //3.抓取URL并把它传递给浏览器// $data = curl_exec($ch);// //4.关闭cURL资源,并且释放系统资源// curl_close($ch); //file_get_contents取 if (!file_exists($url)) { return FALSE; } $data = file_get_contents($url); return $data; } /** * 保存xml内容 * 未完 */ public function saveXMl($data, $path) { $xml = simplexml_load_string($data); return $xml->asXML($path); } /** * 保存html内容 */ public function saveHtml($data, $path) { return file_put_contents($path, $data); }}
0 0
- 分享一单例模式的文件操作类
- 分享一个文件操作的工具类
- 文件的操作模式
- Java Commons-io文件操作类分享
- 分享一个收集到的文件和目录操作类FileSystemObject
- 先分享一个类:用于文件操作的,使用很方便
- 分享一个WPF 操作PDF文件的网址。
- 内核模式下的文件操作
- 6.文件的4种操作模式
- 内核模式下的文件操作
- 内核模式下的文件操作
- 存储MODE(文件的操作模式)
- 内核模式下的文件操作_zwcreatefile_zwopenfile_zwreadfile_zwwritefile
- PHP操作mysql的类。分享一下!
- 分享一个SharedPreferences操作的工具类
- 文件操作模式
- 内核模式 文件操作
- Android文件操作模式
- 时间 日期工具类
- 查找短信的数据库
- 查找通话记录
- 最小生成树Kruskal
- 电话联系人相关业务层类
- 分享一单例模式的文件操作类
- 如何捕获DDL记录
- poj 3070 矩阵快速幂
- 算法基础1——插入排序
- Java日志框架
- 蓝桥杯大臣的旅费
- 生成appcompat_v7(兼容包)并报错的解决方法
- redis
- 多源最短路:floyd