TP3.2兼容本地和Sae的文件操作类

浏览:2272 最后更新:2014-09-20 22:08 分类:类库
补充说明2014-7-18:
最近在实际使用中发现在本地环境中与TP自带的Upload类结合使用存在一个问题:本操作类使用相对于入口文件的地址(即./...)而Upload类上传成功返回相对于根目录的地址(即__ROOT__/...),因此导致错误。
解决方法:对要操作的地址进行处理 ,自己写了个函数
function convert_url($url){
if(strpos($url,__ROOT__.'/')==0){
return substr($url, strlen(__ROOT__.'/'));
}else{
return $url;
}
}

参考了框架的驱动机制,根据不同环境实例化不同环境下的操作类,消除代码差异。

支持文件读、写、移动、删除,文件夹删除、清空
主要代码<?php
/*
 * 本类统一使用本地地址格式,不同环境下会自动转换。另外SAE环境下也可以直接使用Storage地址。
*/
namespace My;
class FileUtil{
    static protected $handler;
    /*
     * 连接文件系统,就是根据运行环境实例化相应的驱动
     * @param string $type File或Sae,兼容本地和Sae环境
     * @return viod
    */
    static public function connect($type='File') {
        $class  =   '\\My\\FileUtil\\Driver\\'.ucwords($type);
        self::$handler = new $class();
    }
    /*
     * 删除指定文件
     * @param string $aimUrl 要删除的文件地址。
     * @return boolen
    */
    static public function unlinkFile($aimUrl){
        return self::$handler->unlinkFile($aimUrl);
    }
    /*
     * 移动指定文件
     * @param string $fileUrl 要移动的文件地址。
     * @param string $aimUrl 移动后的新地址。
     * @param boolen $overWrite 是否覆盖已存在的文件。
     * @return boolen
    */
    static public function moveFile($fileUrl, $aimUrl, $overWrite = true){
        return self::$handler->moveFile($fileUrl, $aimUrl, $overWrite);
    }
    /*
     * 获取目录下子目录及文件列表
     * @param string $dirUrl 要扫描的目录地址。
     * @return array
    */
    static public function getList($dirUrl){
        return self::$handler->getList($dirUrl);
    }
    /*
     * 清空目录
     * @param string $dirUrl 要清空的目录地址。
     * @return boolen
    */
    static public function clearDir($dirUrl){
        return self::$handler->clearDir($dirUrl);
    }
    /*
     * 删除目录
     * @param string $dirUrl 要删除的目录地址。
     * @return boolen
    */
    static public function unlinkDir($dirUrl){
        return self::$handler->unlinkDir($dirUrl);
    }
    /*
     * 读取文件
     * @param string $fileUrl 要读取的文件地址。
     * @return 成功返回文件内容,失败返回FALSE
    */
    static public function readFile($fileUrl){
        return self::$handler->readFile($fileUrl);
    }
    /*
     * 写入文件
     * @param string $fileUrl 要写入的文件地址。
     * @param string $content 写入内容
     * @return 成功返回文件地址,失败返回FALSE
    */
    static public function writeFile($fileUrl,$content){
        return self::$handler->writeFile($fileUrl,$content);
    }
    /*
     * 将本地地址转换为当前环境地址
     * @param string $url 要转换的地址。
     * @return string
    */
    static public function encodeUrl($url){
        return self::$handler->encodeUrl($url);
    }
    /*
     * 将当前环境地址转换为本地地址
     * @param string $url 要转换的地址。
     * @return string
    */
    static public function decodeUrl($url){
        return self::$handler->decodeUrl($url);
    }
    /*
     * 判断文件是否存在(不能用于判断目录)
     * @param string $fileUrl 要判断的文件地址。
     * @return boolen
    */
    static public function fileExists($fileUrl){
        return self::$handler->fileExists($fileUrl);
    }
}
用法namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function _initialize(){
        \My\FileUtil::connect(STORAGE_TYPE);
    }
    public function index(){
       dump(\My\FileUtil::getList('Uploads'));
    }
}
我觉得文件的管理也是经常用到的功能,TP有必要实现这一功能,实现不同环境的兼容。本人并非程序猿,只是个业余爱好者,代码质量不高,希望能有大神能够完善这一功能,同时也希望TP团队能够考虑下这一需求。
评论( 相关
后面还有条评论,点击查看>>