龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 目录操作类

时间:2014-07-15 02:01来源:网络整理 作者:网络 点击:
分享到:
目录操作类 可以实现目录 占用空间大小统计 , 目录[文件]可读判断 , 目录[文件]可写判断[代码片段(88行)]

可以实现目录 占用空间大小统计 , 目录[文件]可读判断 , 目录[文件]可写判断

<?php
class Dir{
    private $_dir;
    /**
     * 目录类
     * @author 李俊[duguying2008@gmail.com]
     * @param string $dir 目录
     */
    function __construct($dir) {
        $this->_dir=$dir;
    }
    /**
     * 计算目录大小
     * @param string $dir 目录
     * @return number 字节
     */
    public function dirSize($dir=null){
        if ($dir==null) {
            $dir=$this->_dir;
        }
        if (!is_string($dir)) {
            throw new Exception('目录名必须为string类型!');
        }
        $size=0;
        $items=scandir($dir);
        foreach ($items as $item) {
            if (is_file($dir.'/'.$item)) {
                $size=$size+filesize($dir.'/'.$item);
            }elseif (is_dir($dir.'/'.$item)&&'.'!=$item&&'..'!=$item){
                $size=$size+$this->dirSize($dir.'/'.$item);
            }
        }
        return $size;
    }
    /**
     * 判断文件或目录可读
     * @author 李俊
     * @param string $dir 目录名
     * @return bool
     */
    function readable($dir=null) {
        if ($dir==null) {
            $dir=$this->_dir;
        }
        if (!is_string($dir)) {
            throw new Exception('目录名必须为string类型!');
        }
        if (($frst=file_get_contents($dir))&&is_file($dir)) {
            return true;//是文件,并且可读
        }else {//是目录
            if (is_dir($dir)&&scandir($dir)) {
                return true;//目录可读
            }else {
                return false;
            }
        }
    }
    /**
     * 判断文件或目录是否可写
     * @author 李俊
     * @param string $dir 目录名
     * @return bool
     */
    function writeable($dir=null) {
        if ($dir==null) {
            $dir=$this->_dir;
        }
        if (!is_string($dir)) {
            throw new Exception('目录名必须为string类型!');
        }
        if (is_file($dir)) {//对文件的判断
            return is_writeable($dir);
        }elseif (is_dir($dir)) {
            //开始写入测试;
            $file='_______'.time().rand().'_______';
            $file=$dir.'/'.$file;
            if (file_put_contents($file, '//')) {
                unlink($file);//删除测试文件
                return true;
            }else {
                return false;
            }
        }else {
            return false;
        };
    }   
}
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接