php文件操作(常用方法)

  1. 重新格式化文件大小的数据

    // 重新格式化数据
    function formatFileSize($bytes){
        $size = 0;
        while($bytes > 0){
            if( $bytes >= pow(2, 40) ){
                $ret[] = array(
                    'value' => floor($bytes/pow(1024, 4)),
                    'suffix' => 'T'
                );
                $bytes = $bytes%pow(1024, 4);
    
            }else if( $bytes >= pow(2, 30) ){
                $ret[] = array(
                    'value' => floor($bytes/pow(1024, 3)),
                    'suffix' => 'G'
                );
                $bytes = $bytes%pow(1024, 3);
    
            }else if( $bytes >= pow(2, 20) ){
                $ret[] = array(
                    'value' => floor($bytes/pow(1024, 2)),
                    'suffix' => 'M'
                );
                $bytes = $bytes%pow(1024, 2);
    
            }else if( $bytes >= pow(2, 10) ){
                $ret[] = array(
                    'value' => floor($bytes/1024),
                    'suffix' => 'K'
                );
                $bytes = $bytes%1024;
    
            }else{
                $ret[] = array(
                    'value' => $bytes,
                    'suffix' => 'B'
                );
                $bytes = 0;
            }
        }
    
        if( isset($ret)&&$ret ){
            foreach($ret as $s){
                $size .= $s['value'].$s['suffix'];
            }
        }
        
        return $size;
    }
  2. 获取文件类型

    // 获取文件类型
    function getFileType($fileName){
        switch( filetype($fileName) ){
            case 'file':
                $type = '普通文件';
                break;
    
            case 'dir':
                $type = '目录文件';
                break;
    
            case 'block':
                $type = '块设备文件';
                break;
    
            case 'char':
                $type = '字符设备文件';
                break;
    
            case 'fifo':
                $type = '命名管道文件';
                break;
    
            case 'link':
                $type = '符号链接';
                break;
    
            default:
                $type = '未知类型';
        }
        return $type;
    }
  3. 计算目录大小

    // 计算目录大小
    function dirSize($dirname){
        $size = 0;
        if($dir_handle = opendir($dirname)){
            while($filename = readdir($dir_handle)){
                if($filename!='.' && $filename!='..'){
                    $subFile = $dirname.'/'.$filename;
                    if(is_dir($subFile)){
                        $size += dirsize($subFile);
                    }
                    if(is_file($subFile)){
                        $size += filesize($subFile);
                    }
                }
            }
            closedir($dir_handle);
        }
    
        return $size;
    }
  4. 获取文件信息(用到上面三个方法)

    // 获取文件信息
    function getFilePro($fileName){
        $ret = array(
            'success' => false,
            'msg' => '目录文件不存在',
            'file' => null
        );
        if( !file_exists($fileName) ){
            return $ret;
        }
        $parts = pathinfo($fileName);
        $data['name'] = basename($fileName);
        $data['extension'] = isset($parts['extension']) ? $parts['extension'] : 'none';
    
        $data['type'] = getFileType($fileName);
    
        switch (filetype($fileName)) {
            case 'file':
                $data['size'] = formatFileSize(filesize($fileName));
                break;
            case 'dir':
                $data['size'] = formatFileSize(dirSize($fileName));
                break;
            default:
                $data['size'] = 0;
        }
    
        if( is_readable($fileName) ){
            $data['readable'] = '可读';
        }
        if( is_writable($fileName) ){
            $data['writable'] = '可写';
        }
        if( is_executable($fileName) ){
            $data['executable'] = '可执行';
        }
    
        $data['create'] = date('Y年m月j日', filectime($fileName));
        $data['modify'] = date('Y年m月j日', filemtime($fileName));
        $data['access'] = date('Y年m月j日', fileatime($fileName));
        
        $ret['success'] = true;
        $ret['msg'] = '目录文件存在';
        $ret['file'] = $data;
        return $ret;
    }
  5. 遍历目录(与计算目录大小方法步骤相似)

    // 遍历目录
    function traverseDir($dirname){
        $ret = array();
        $dir_handle = opendir($dirname);
        while($file = readdir($dir_handle)){
            $dirFile = $dirname.'/'.$file;
            $filePro = getFilePro($dirFile);
            if($filePro['success']){
                $ret[] = $filePro['file'];
            }
        }
        closedir($dir_handle);
    
        //return $ret;
        foreach($ret as $file){
            foreach($file as $k => $v){
                echo $k, '==', $v, '<br/>';
            }
            echo '<br/>';
        }
    }
  6. 复制目录

    // 复制目录
    function copyDir($dirSrc, $dirTo){
        if(is_file($dirTo)){
            return;
        }
        if(!file_exists($dirTo)){
            mkdir($dirTo);
        }
        if($dir_handle = opendir($dirSrc)){
            while($filename = readdir($dir_handle)){
                if($filename!='.' && $filename!='..'){
                    $subSrcFile = $dirSrc.'/'.$filename;
                    $subToFile = $dirTo.'/'.$filename;
    
                    if(is_dir($subSrcFile)){
                        copydir($subSrcFile, $subToFile);
                    }
                    if(is_file($subSrcFile)){
                        copy($subSrcFile, $subToFile);
                    }
                }
            }
            closedir($dir_handle);
        }
    }
  7. 删除目录

    /**
     * 使用 mkdir()函数只需要传入一个目录名即可很容易地建立一个新目录。
     * 删除目录所用的函数rmdir()只能删除一个空目录并且目录必须存在;
     * 若是非空目录就要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉,
     * 再回来将这个空目录删除;
     * 若是目录中还存在子目录且子目录也非空,就要用到递归方法。
     */
    function delDir($dirname){
        if(file_exists($dirname)){
            if($dir_handle = opendir($dirname)){
                while($filename = readdir($dir_handle)){
                    if($filename!='.' && $filename!='..'){
                        $subFile = $dirname.'/'.$filename;
                        if(is_dir($subFile)){
                            deldir($subFile);
                        }
                        if(is_file($subFile)){
                            unlink($subFile);
                        }
                    }
                }
                closedir($dir_handle);
                rmdir($dirname);
            }
        }
    }
  8. 移动目录(即先复制目录,然后删除原来目录)

posted on 2013-01-30 10:23  27_Man  阅读(226)  评论(0)    收藏  举报