<?php


// +----------------------------------------------------------------------


// | TOPThink [ WE CAN DO IT JUST THINK ]


// +----------------------------------------------------------------------


// | Copyright (c) 2013 http://topthink.com All rights reserved.


// +----------------------------------------------------------------------


// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )


// +----------------------------------------------------------------------


// | Author: liu21st <liu21st@gmail.com>


// +----------------------------------------------------------------------


namespace Think\Storage\Driver;


use Think\Storage;


// 本地文件写入存储类


class File extends Storage{





    private $contents=array();





    /**


     * 架构函数


     * @access public


     */


    public function __construct() {


    }





    /**


     * 文件内容读取


     * @access public


     * @param string $filename  文件名


     * @return string     


     */


    public function read($filename,$type=''){


        return $this->get($filename,'content',$type);


    }





    /**


     * 文件写入


     * @access public


     * @param string $filename  文件名


     * @param string $content  文件内容


     * @return boolean         


     */


    public function put($filename,$content,$type=''){


        $dir         =  dirname($filename);


        if(!is_dir($dir)){


            mkdir($dir,0777,true);


        }


        if(false === file_put_contents($filename,$content)){


            E(L('_STORAGE_WRITE_ERROR_').':'.$filename);


        }else{


            $this->contents[$filename]=$content;


            return true;


        }


    }





    /**


     * 文件追加写入


     * @access public


     * @param string $filename  文件名


     * @param string $content  追加的文件内容


     * @return boolean        


     */


    public function append($filename,$content,$type=''){


        if(is_file($filename)){


            $content =  $this->read($filename,$type).$content;


        }


        return $this->put($filename,$content,$type);


    }





    /**


     * 加载文件


     * @access public


     * @param string $filename  文件名


     * @param array $vars  传入变量


     * @return void        


     */


    public function load($_filename,$vars=null){


        if(!is_null($vars)){


            extract($vars, EXTR_OVERWRITE);


        }


        include $_filename;


    }





    /**


     * 文件是否存在


     * @access public


     * @param string $filename  文件名


     * @return boolean     


     */


    public function has($filename,$type=''){


        return is_file($filename);


    }





    /**


     * 文件删除


     * @access public


     * @param string $filename  文件名


     * @return boolean     


     */


    public function unlink($filename,$type=''){


        unset($this->contents[$filename]);


        return is_file($filename) ? unlink($filename) : false; 


    }





    /**


     * 读取文件信息


     * @access public


     * @param string $filename  文件名


     * @param string $name  信息名 mtime或者content


     * @return boolean     


     */


    public function get($filename,$name,$type=''){


        if(!isset($this->contents[$filename])){


            if(!is_file($filename)) return false;


           $this->contents[$filename]=file_get_contents($filename);


        }


        $content=$this->contents[$filename];


        $info   =   array(


            'mtime'     =>  filemtime($filename),


            'content'   =>  $content


        );


        return $info[$name];


    }


}


