用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - php代码库

文件操作类

2014-10-11 作者: 小蜜锋举报

[php]代码库

<?php
/**
 * 文件操作类
 */
!defined('PATH_ADMIN') && exit('Forbidden');
class FileModel{
    /**
     * 写文件
     *
     * @param string $filename
     * @param string $data
     * @param string $method
     * @param int $iflock
     * @param int $check
     * @param int $chmod
     * @return boolean
     */
    public static function write($filename, $data, $method = 'wb+', $iflock = 1, $check = 1, $chmod = 1){
        if(empty($filename)){
            return false;
        }

        if($check && strpos($filename,'..') !== false){
            return false;
        }

        if(!is_dir(dirname($filename)) && !self::mkdir_recursive(dirname($filename),0777)){
            return false;
        }
        if(false == ($handle = fopen($filename,$method))){
            return false;
        }

        if($iflock){
            flock($handle,LOCK_EX);
        }
        fwrite($handle,$data);
        touch($filename);

        if($method == "wb+"){
            ftruncate($handle,strlen($data));
        }
        fclose($handle);
        $chmod && @chmod($filename,0777);

        return true;
    }

    /**
     * 读文件
     *
     * @param string $filename
     * @param string $method
     * @return string
     */
    public static function read($filename, $method = "rb"){
        if(strpos($filename,'..') !== false){
            return false;
        }
        if($handle = @fopen($filename,$method)){
            flock($handle,LOCK_SH);
            $filedata = @fread($handle,filesize($filename));
            fclose($handle);
            return $filedata;
        }else{
            return false;
        }
    }

    /**
     * 删除文件
     *
     * @param string $filename
     * @return boolean
     */
    public static function rm($filename){
        if(strpos($filename,'..') !== false){
            return false;
        }

        return @unlink($filename);
    }

    /**
     * 用递归方式创建目录
     *
     * @param string $pathname
     * @param $mode
     * @return boolean
     */
    public static function mkdir_recursive($pathname, $mode){
        if(strpos($pathname,'..') !== false){
            return false;
        }
        $pathname = rtrim(preg_replace(array(
            '/\\{1,}/',
            '/\/{2,}/'
        ),'/',$pathname),'/');
        if(is_dir($pathname)){
            return true;
        }

        is_dir(dirname($pathname)) || self::mkdir_recursive(dirname($pathname),$mode);
        return is_dir($pathname) || @mkdir($pathname,$mode);
    }

    /**
     * 用递归方式删除目录
     *
     * @param string $file
     * @return boolean
     */
    public static function rm_recurse($file){
        if(strpos($file,'..') !== false){
            return false;
        }

        if(is_dir($file) && !is_link($file)){
            foreach(scandir($file) as $sf){
                if($sf === '..' || $sf === '.'){
                    continue;
                }
                if(!self::rm_recurse($file . '/' . $sf)){
                    return false;
                }
            }
            return @rmdir($file);
        }else{
            return unlink($file);
        }
    }

    /**
     * 引用文件安全检查
     *
     * @param string $filename
     * @param int $ifcheck
     * @return boolean
     */
    public static function check_security($filename, $ifcheck = 1){
        if(strpos($filename,'http://') !== false) return false;
        if(strpos($filename,'https://') !== false) return false;
        if(strpos($filename,'ftp://') !== false) return false;
        if(strpos($filename,'ftps://') !== false) return false;
        if(strpos($filename,'php://') !== false) return false;
        if(strpos($filename,'..') !== false) return false;

        return $filename;
    }

    /**
     * 文件列表
     *
     * @param string $path //路径
     * @param string $type[optional] //类型:file 文件,dir 目录, 缺省 file+dir
     * @return array
     */
    public static function ls($path, $type = ''){
        if(!is_dir($path)){
            return false;
        }
        $files = scandir($path);
        array_shift($files);
        array_shift($files);
        if(!empty($type) && in_array($type,array(
            'file',
            'dir'
        ))){
            $func = "is_" . $type;
            foreach($files as $k => $cur_file){
                if(!$func($path . '/' . $cur_file) || $cur_file == '.svn'){
                    unset($files[$k]);
                }
            }
        }
        return $files;
    }
}


网友评论    (发表评论)


发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...