zoukankan      html  css  js  c++  java
  • PHP创建缓存文件

    文件操作类

    <?php
    /**
        文件操作类
    */
    class FileIO
    {
        /**
         * 读取目录
         * @param    string $dirPath dir名称
         * @return    array  返回数组
         */
        function getDirFile($dirPath)
        {
            $fArray = array();
            $dArray = array();
            //如果是文件
            if(FileIO::isFileExists($dirPath))
            {
                $fArray[] = $dirPath;
                return array('file'=>$fArray,'dir'=>$dArray);
            }
            //如果不是目录
            if(!FileIo::isDirExists($dirPath))
            {
                return array('file'=>$fArray,'dir'=>$dArray);
            }
            $handle=opendir($dirPath);
            while($file=readdir($handle))
            {
                if($file=='.' || $file=='..') continue;
                $fileName = $dirPath.$file;
                if(FileIo::isDirExists($fileName))
                {
                    $dArray[] = $file;
                }
                if(FileIO::isFileExists($fileName))
                {
                    $fArray[] = $file;
                }
            }
            closedir($handle);
            return array('file'=>$fArray,'dir'=>$dArray);
        }
    
        /**
         * 取得文件后缀(只取得文件的最后一个后缀名)
         * @param    string    $fileName    文件名        
         * @return    string    $fileType    文件后缀
         */
        function getFileType($fileName)
        {
            return strtolower(end(explode('.',$fileName)));
        }
    
        /**
         * 写入一个文件
         * @param $fileName    文件名称
         * @param $data        文件里写入的内容
         * @param $mode        文件写入模式
         * @param $isCp        是否创建备份文件
         * @return bool        成功返回true
         * @example
         * $f = new FileIO();
         * $f->writeFile('list/aaa/test.php','<?php phpinfo(); ?>','',true);
         * 在当前目录list/aaa文件夹下创建test.php文件
         */
        function writeFile($fileName,$data,$mode="",$isCp=false)
        {
            $fileName = str_replace("\","/",$fileName);
            $dirName = dirname( $fileName ); //获得部分文件目录
            if( !FileIo::isDirExists($dirName) ) //如果不是目录
            {
                if( !FileIo::createDir($dirName) ) //如果不能建立目录
                {
                    return false; 
                }
            }
            //建立备份文件
            if( FileIO::isFileExists($fileName) && $isCp ) //判断文件是否存在
                    FileIO::copyFile($fileName,$fileName."_".date("Y,m,d,H,i,s")); //复制文件,成功返回true
            if( function_exists("file_put_contents") && empty($mode) ) //如果方法存在与$mode是空
            {
                //将$date以字符串写入$fileName文件里面
                $inputLen = file_put_contents($fileName,strval($data)); 
                if( $inputLen != strlen($data) ) //如果$inputLen 没有长度
                {
                    return false; 
                }
            } else {
                $mode .= empty($mode)?"w+":"b"; //是空就写入,否则就是二进制b
                $fp = fopen($fileName,$mode);
                if( !$fp )
                {
                    return false;
                }
                fwrite($fp,$data,strlen($data)); //写入数据
                @fclose($fp); //关闭数据 
            }
            return true;
        }
    
        /**
         * 建立目录
         * @parma    $dirName 目录名称
         * @return    bool     成功返回true
         * @example
         * $f = new FileIO();
         * $f->createDir('list/aaa'); 当前目录下创建list/aaa文件夹
         */
        function createDir($dirName)
        {
            $dirName = str_replace("\","/",$dirName);
            $dirArr = explode('/',$dirName);
            //增加对绝对目录的判断
            if(substr($dirName,0,1)=='/')
                $dirTemp = "/";
            else
                $dirTemp = "";
            foreach( (array)$dirArr as $dir )
            {
                if( empty($dir) ) continue;
                $dirTemp.= $dir."/";
                if( !is_dir($dirTemp) )
                {
                    if( !@mkdir($dirTemp,0777) )
                    {
                        return false;
                    }
                    chmod($dirTemp,0777);
                }
            }
            return true;
        }
    
        /**
         * 取得文件的内容
         * @parma    string    $fileName    要取得的文件名称
         * @return    如果失败返回 false    成功返回文件内容
         * @example
         * $f = new FileIO();
         * $f->fileGetContent('list/aaa/test.php') 读取test.php文件的内容
         */
        function fileGetContent( $fileName )
        {
            if( !FileIO::isFileExists($fileName) ) return false;
            if( function_exists("file_get_contents") )
                return file_get_contents( $fileName );
            else
                return fread( fopen($fileName,"r"),filesize($fileName)+1 );
        }
    
        /**
         * 判断一个文件是否存在
         * @param    string    $fileName 判断的文件名称
         * @return    bool    如果存在返回true
         */
        function isFileExists( $fileName )
        {
            clearstatcache();
            return file_exists( $fileName ) && is_file( $fileName );
        }
    
        /**
         * 判断一个目录是否存在
         * @param    $dirName    判断的文件名称
         * @return    bool        如果存在返回true
         */
        function isDirExists( $dirName )
        {
            clearstatcache();
            return file_exists( $dirName ) && is_dir( $dirName );
        }
    
        /**
         * 删除文件
         * @param    $fileName    删除的文件名称    
         * @return    bool        删除成功返回true
         */
        function delFile($fileName)
        {
            if( FileIO::isFileExists($fileName) )
                return unlink($fileName);
            return true;
        }
    
        /**
         * 删除目录
         * @param    $dirName    删除的目录名称    
         * @return    bool        删除成功返回true
         */
        function delDir($dirName)
        {
            if( !FileIO::isDirExists($dirName) )
            {
                return false;
            }
            $handle = @opendir($dirName);
            while(false !== ($file = @readdir($handle)))
            {
                if($file != "." && $file != "..")
                {
                    @chmod($dirName . "/" . $file, 0777); //改变文件模式
                    if(FileIO::isDirExists($dirName . "/" . $file))  //判断目录是否存在
                    {
                        FileIO::delDir($dirName . "/" . $file); //存在就删除目录
                    } else {
                        if( !FileIO::delFile($dirName . "/" . $file)) return false;
                    }
                }
            }
            @closedir($handle);
            @rmdir($dirName);
            return true;
        }
    
        /**
         * 文件复制
         * @param    $source    源文件
         * @param    $dest    目标文件
         * return    bool    复制成功返回true
         */
        function copyFile($source, $dest)
        {
            if( !FileIO::isFileExists($source) ) return false;
            $destDir = dirname($dest);
            if( !FileIO::isDirExists($destDir))
            {
                if( !FileIO::createDir($destDir) ) return false;
            }
            return copy($source, $dest);
        }
    
        /**
         * 目录复制
         * @param    $source    源文件
         * @param    $dest    目标文件
         * return    bool    复制成功返回true
         */
        function copyDir($source, $dest)
        {
            if( !FileIO::isDirExists($source) ) return false;
            if( !FileIO::isDirExists($dest) ) FileIO::createDir( $dest );
            $handle = @opendir($source);
            while(false !== ($file = @readdir($handle)))
            {
                if($file != "." && $file != "..")
                {
                    @chmod($source . "/" . $file, 0777);
                    if( FileIO::isDirExists($source . "/" . $file) )
                    { 
                        FileIO::copyDir( $source."/".$file."/",$dest."/".$file."/" );
                    } else {
                        if( !FileIO::copyFile( $source."/".$file,$dest."/".$file ) )
                        {
                            @closedir($handle);
                            return false;
                        }
                    }
                }
            }
            @closedir($handle);
            return true;
        }
    
        /**
         * 文件移动
         * @param    $source    源文件
         * @param    $dest    目标文件
         * return    bool    复制成功返回true
         */
        function moveFile($source,$dest)
        {
            return FileIO::copyFile($source,$dest) && FileIo::delFile($source);
        }
    
        /**
         * 目录移动
         * @param    $source    源文件
         * @param    $dest    目标文件
         * return    bool    复制成功返回true
         */
        function moveDir($source,$dest)
        {
            return FileIO::copyDir($source,$dest) && FileIo::delDir($source);
        }
    
        /**
         * 根据数组建立缓存数组文件
         * @param  $result        建立的数据数组
         * @param  $cacheName    建立的数组名称,文件名为.data.php
         * @param  $dir            建立文件保存的地址
         * @param  $expire        缓存到期时间,以分钟为单位,默认为1小时
         */
        function makeArrayCache($result,$cacheName,$dir,$expire=60)
        {
            $temp[] ="<?php";
            $temp[] ="$create_time=".time().";";
            $temp[] ="${$cacheName} = array();";
            foreach($result as $key => $value)
            {
                if(preg_match("/^[d]$/i",$key))
                    $temp[] = "${$cacheName}[{$key}]="{$value}";";
                else
                    $temp[] = "${$cacheName}['{$key}']="{$value}";";
            }
            $temp[] = "if(time() - $create_time > $expire * 60) return false;";
            $temp[] = "return ${$cacheName};";
            $temp[] = "?>";
            $fileName = $dir."{$cacheName}.data.php";
            unset($result);
            return $make = FileIO::writeFile($fileName,implode("
    ",$temp));
        }
    
        /**
         * 根据字符串建立缓存文件
         * @param  $str            建立的字符串
         * @param  $cacheName    建立的数组名称,文件名为 .data.php
         * @param  $dir            建立文件保存的地址
         * @param  $expire        缓存到期时间,以分钟为单位,默认为1小时
         */
        function makeStringCache($str,$cacheName,$dir,$expire=60)
        {
            $temp[] ="<?php";
            $temp[] ="$create_time=".time().";";
            $temp[] ="${$cacheName} = '{$str}';";
            $temp[] = "if(time() - $create_time > $expire * 60) return false;";
            $temp[] = "return ${$cacheName};";
            $temp[] = "?>";
            $fileName = $dir."{$cacheName}.data.php";
            unset($result);
            return $make = FileIO::writeFile($fileName,implode("
    ",$temp));
        }
    
        /**
         * 获取Hash文件名
         * @param  $str 为hash的字段
         * @return fileName 为hash后的文件名,加目录名
         */
        function getHashFileName($str,$isFileName=false)
        {
            $fileName = "";
            $hashTemp = md5(strval($str));
            $fileName .=substr($hashTemp,0,2)."/";//一级目录为256个
            $fileName .=substr($hashTemp,2,2)."/";//二级目录下单个目录为 256个
            $fileName .=substr($hashTemp,4,3);//三级目录下单个目录为 4096个
            if($isFileName)
            {
                $fileName.=substr($hashTemp,7);
            }
            return $fileName;
        }
    
        /**
         * 判断文件的过期时间
         * @param  $fileName  文件名
         * @param  $overTime  过期时间
         * @return 过期返回true
         */
        function isOverTime($fileName,$overTime)
        {
            //如果传递为0的话则默认为永久缓存
            if($overTime) {
                if(FileIO::isFileExists($fileName))
                {
                    if(time()-filemtime($fileName)>$overTime)
                    {
                        return true;
                    } else {
                        return false;
                    }
                }
                return true;
            } else {
                return false;
            }
        }
    }

    调用方式

    <?php
    include("FileIO.class.php");
    $f = new FileIO();
    $filename = "test.data.php";
    if(!$f->isFileExists($filename)) {
        $f->writeFile($filename, '');
    }
    $rs = include($filename);
    var_dump($rs);
    if($rs === false) {
        $f->makeStringCache("kkkkk|sfsfdsdf|asdfdsfds",'test','./',1);
    }
  • 相关阅读:
    mysql系列~mysqldump使用技巧
    mysql系列~logrotate
    最详细的经典双向电平转换电路的工作原理图文分析
    《USB应用分析精粹:从设备硬件、固件到主机程序设计》已经完稿
    Windows x86环境下使用QEMU安装arm架构银河麒麟V10操作系统
    不动产测绘包含哪些内容
    java问题收集
    java调用接口(rest-assured)
    java调用接口(okhttp )
    testng+allure
  • 原文地址:https://www.cnblogs.com/phpfans/p/3182115.html
Copyright © 2011-2022 走看看