ThinkPHP文件操作(补全目录操作)

  最新版本的tp3.2.2中的文件驱动类目前得功能有文件的读,写,追加写,加载文件,判断文件是否存在,文件删除,读取文件信息,小弟在这增加了些目录和文件,分享给大家,需要完善的地方还请大神们多多指教拉! 这里新增了获取目录下子目录及文件列表,移动指定文件,清空目录(不包括目录文件夹),删除目录。

  调用文件驱动 IndexController.class.php

<?php
namespace Home\Controller;
use Think\Controller;
use Think\Storage; //引用文件驱动
class IndexController extends Controller {
    public function index(){
    	$file = new Storage;  //实例化文件驱动
    	$file::connect(STORAGE_TYPE); 
    	$view =  MODULE_PATH."View";
    	$list = $file::getList($view);
    	foreach ($list as $k) {
    		if(is_array($k))
    		{
    			foreach ($k as $key) {
    			echo $key["name"]."<br>";
    			}
    		}
    	}   	
    	$this->display();
    }
}

 TP的默认文件驱动 Library\Think\Storage\Driver 在File.class.php这个文件类中追加目录操作方法:

    /*
     * 获取目录下子目录及文件列表
     * @param string $dirUrl 要扫描的目录地址。
     * @return array
    */
    public function getList($dirUrl){
        $dirUrl=rtrim($dirUrl,'/');
        if(!is_dir($dirUrl)){
            return false;
        }
        $fileList=array();
        $dirList=array();
        $objects=scandir($dirUrl);
        foreach($objects as $obj){
            if($obj=='.'||$obj=='..'){
                continue;
            }
            $fileUrl=$dirUrl.'/'.$obj;
            if(is_file($fileUrl)){
                $filesize=filesize($fileUrl);
                $fileupdate=fileatime($fileUrl);
                array_push($fileList,array('Name'=>$obj,'fullName'=>$fileUrl,'length'=>$filesize,'uploadTime'=>$fileupdate));
            }
            if(is_dir($fileUrl)){
                array_push($dirList,array('name'=>$obj,'fullName'=>$fileUrl));
            }
        }
        return array('dirNum'=>count($dirList),'fileNum'=>count($fileList),'dirs'=>$dirList,'files'=>$fileList);
    }

    /*
     * 移动指定文件
     * @param string $fileUrl 要移动的文件地址。
     * @param string $aimUrl 移动后的新地址。
     * @param boolen $overWrite 是否覆盖已存在的文件。
     * @return boolen
    */
    public function moveFile($fileUrl, $aimUrl, $overWrite = true) {
        if (!is_file($fileUrl)) {
            return false;
        }
        if (is_file($aimUrl) && $overWrite == false) {
            return false;
        } elseif (is_file($aimUrl) && $overWrite == true) {
            $this->unlinkFile($aimUrl);
        }
        $aimDir = dirname($aimUrl);
        $this->createDir($aimDir);
        rename($fileUrl, $aimUrl);
        return true;
    }
    /*
     * 清空目录
     * @param string $dirUrl 要清空的目录地址。
     * @return boolen
    */
    public function clearDir($dirUrl){
        $dirUrl=rtrim($dirUrl,'/');
        if(!is_dir($dirUrl)){
            return false;
        }
        $infos=$this->getList($dirUrl);
        $result=true;
        foreach ($infos['files'] as $file){
            $result=$this->unlinkFile($file['fullName']);
        }
        foreach ($infos['dirs'] as $dir){
            $result=$this->unlinkDir($dir['fullName']);
        }
        return $result;
    }
    /*
     * 删除目录
     * @param string $dirUrl 要删除的目录地址。
     * @return boolen
    */
    public function unlinkDir($dirUrl){
        $dirUrl=rtrim($dirUrl,'/');
        if(!is_dir($dirUrl)){
            return false;
        }
        $infos=$this->getList($dirUrl);
        foreach ($infos['files'] as $file){
            $this->unlinkFile($file['fullName']);
        }
        foreach ($infos['dirs'] as $dir){
            $this->unlinkDir($dir['fullName']);
        }
        return rmdir($dirUrl);
    }

  通过文件操作类可以仿cms文件操作哦,直接在线修改模板。

posted @ 2014-06-15 12:55  leisir  阅读(785)  评论(0)    收藏  举报