PHP 目录操作类

  • 2016-9-23 11:16
  • PHP二次开发
  • 阅读(1762)
  • 评论(2
  • 来源:互联网
  • 摘要: ?php/*** 目录处理类* @package tools_class*/final class Dir{ /** * 转为标准路径结构 * @param string 目录名 * return string 目录名 */ static public function dirPath($dir_name) { $dirname = str_ireplace( ...
    <?php
    /**
     * 目录处理类
     * @package     tools_class
     */
    final class Dir{

        /**
         * 转为标准路径结构
         * @param     string         目录名
         * return     string        目录名
         */
        static public function dirPath($dir_name) {
            $dirname = str_ireplace("\\", "/", $dir_name);
            return substr($dirname, "-1") == "/" ? $dirname : $dirname . "/";
        }

        /**
         * 获得扩展名
         * @param    $file         文件名
         * return     string         扩展名
         */
        static public function getExt($file) {
            return strtolower(substr(strrchr($file, "."), 1));
        }

        /**
         * 遍历目录内容
         * @param     $dirName    目录名
         * @param    $ext    array 扩展名
         * @param     $son    是否显示子目录
         * return     Array
         */
        static function tree($dirName=null, $exts = '', $son = 0, $list = array()) {
            if(is_null($dirName))$dirName='.';
            $dirPath = self::dirPath($dirName);
            static $id = 0;
            if (is_array($exts))
                $exts = implode("|", $exts);
            foreach (glob($dirPath . '*') as $v) {
                $id++;
                if (is_dir($v) || !$exts || preg_match("/\.($exts)/i", $v)) {
                    $list [$id] ['name'] = basename($v);
                    $list [$id] ['path'] = str_replace("\\", "/", realpath($v));
                    $list [$id] ['type'] = filetype($v);
                    $list [$id] ['filemtime'] = filemtime($v);
                    $list [$id] ['fileatime'] = fileatime($v);
                    $list [$id] ['filesize'] = filesize($v);
                    $list [$id] ['iswrite'] = is_writeable($v) ? 1 : 0;
                    $list [$id] ['isread'] = is_readable($v) ? 1 : 0;
                }
                if ($son) {
                    if (is_dir($v)) {
                        $list = self::tree($v, $exts, $son = 1, $list);
                    }
                }
            }
            return $list;
        }

        /**
         * 只显示目录树
         * @param string    $dirName    目录名
         * @param string    $pid    父目录ID
         * @param array    $dirs    目录列表
         */
        static function treeDir($dirName=null, $son = 0, $pid = 0, $dirs = array()) {
            if(!$dirName)$dirName='.';
            static $id = 0;
            $dirPath = self::dirPath($dirName);
            foreach (glob($dirPath . "*") as $v) {
                if (is_dir($v)) {
                    $id++;
                    $dirs [$id] = array("id" => $id, 'pid' => $pid, "dirname" => basename($v), "dirpath" => $v);
                    if ($son) {
                        $dirs = self::treeDir($v, $son, $id, $dirs);
                    }
                }
            }
            return $dirs;
        }

        /**
         *
         * 删除目录及文件,支持多层删除目录
         * @param    $dirName    目录名
         */
        static function del($dirName) {
            $dirPath = self::dirPath($dirName);
            if(is_file($dirName)){
                unlink($dirName);
                return true;
            }
            foreach (glob($dirPath . "*") as $v) {
                is_dir($v) ? self::del($v) : unlink($v);
            }
            return rmdir($dirName);
        }

        /**
         * 批量创建目录
         * @param $dirArr    目录名数组
         * @param $auth        权限
         */
        static function create($dirName, $auth = 0755) {
            $dirPath = self::dirPath($dirName);
            if (is_dir($dirPath))
                return true;
            $dirs = explode('/', $dirPath);
            $dir = '';
            foreach ($dirs as $v) {
                $dir .= $v . '/';
                if (is_dir($dir))
                    continue;
                mkdir($dir, $auth);
            }
            return is_dir($dirPath);
        }

        /**
         * 复制目录
         * @param string    $olddir        原目录
         * @param string    $newdir        复制到目录
         * @param boolean     $strip_space      去空白去注释
         */
        static function copy($olddir, $newdir, $strip_space = false) {
            $olddir = self::dirPath($olddir);
            $newdir = self::dirPath($newdir);
            if (!is_dir($olddir))
                error("复制失败:" . $olddir . "目录不存在");
            if (!is_dir($newdir))
                self::create($newdir);
            foreach (glob($olddir . '*') as $v) {
                $to = $newdir . basename($v);
                if (is_file($to))
                    continue;
                if (is_dir($v)) {
                    self::copy($v, $to, $strip_space);
                } else {
                    if ($strip_space) {
                        $data = file_get_contents($v);
                        $preg = array(
                            '/(?<!\\\\)\/\*[^;\]\}\)\'"]+?\*\//is', //去多行注释
                            '/(?<=[,;{}])\s*\/\/.*/im', //去代码后单行注释
                            '/^\s*\/\/.*/im', //去除前面没有代码的单行注释
                                // '/(?<=})\s*/is', //去除以}开头的空白
                                // '/(?<![a-z])\s*/is', //去非字符间的空白
                        );
                        $data = preg_replace($preg, '', $data);
                        file_put_contents($to, $data);
                    } else {
                        copy($v, $to);
                    }
                    chmod($to, "0777");
                }
            }
            return true;
        }

    }



    PHP技术交流QQ群:422137578

    除非注明,文章均为 PHP二次开发 原创,转载请注明本文地址:http://www.php2.cc/article-2465-1.html

    相关阅读

    发表评论

    最新评论

    引用 时尚网   2016-9-27 11:59
    看看!!!
    引用 购物街   2016-9-23 14:13
    谢谢分享

    查看全部评论(2)

    用户名:  *

    邮 箱:  *

    网 址: 注意加上“http://”哦!