文件操作类

<?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("\n",$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("\n",$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);
}

PHP创建缓存文件的更多相关文章

  1. 创建缓存文件(。php)

    public function user_dengji(){        $this->sdb->select('groupid,grouptitle');        $query ...

  2. 创建TPL自定义模板

    文件布局 <!--1d7c7a527b6335cc7a623305ca940e1findex.tpl.html--> <!DOCTYPE html PUBLIC "-//W ...

  3. Android实现TCP断点上传,后台C#服务实现接收

    终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证, ...

  4. CRL快速开发框架开源完全转到Github

    CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...

  5. CRL快速开发框架升级到3.1

    CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...

  6. 转:Java.file

    类 java.io.File 的使用 使用 File 的软件包 java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.io 通过数据流.序列化和文件系统提供系统输入和输出. jav ...

  7. PHP文件缓存实现

    有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些共更能: 功能实现:get.set.has.increment.d ...

  8. Android中关于Volley的使用(五)从RequestQueue开始来深入认识Volley

    在前面的几篇文章中,我们学习了如何用Volley去网络加载JSON数据,如何利用ImageRequest和NetworkImageView去网络加载数据,而关于Volley的使用,我们都是从下面一行代 ...

  9. IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)

    /* * @brief 图片加载通用函数 * @parma imageName 图片名 */ - (void)imageStartLoading:(NSString *)imageName{ NSUR ...

随机推荐

  1. 你知道你对 JSON Web Token 的认识存在误解吗

    1.前言 JSON Web Token (JWT) 其实目前已经广为软件开发者所熟知了,但是 JOSE (Javascript Object Signing and Encryption) 却鲜有人知 ...

  2. 安装R的h5包

    系统 redhat7 安装H5的包, 依赖系统hdf5包,如下安装完, 发现版本不一致, sudo yum install hdf5-devel 解决办法: 移花接木 sudo ln -s /opt/ ...

  3. 14 微服务电商【黑马乐优商城】:day02-springcloud(理论篇四:配置Robbin负载均衡)

    本项目的笔记和资料的Download,请点击这一句话自行获取. day01-springboot(理论篇) :day01-springboot(实践篇) day02-springcloud(理论篇一) ...

  4. hdu2222 (AC自动机模板)

    题:http://acm.hdu.edu.cn/showproblem.php?pid=2222 学习出:https://bestsort.cn/2019/04/28/402/ 主要是fail的建立. ...

  5. UI自动化(selenium+python)之元素定位的三种等待方式

    前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况.这种情况下,需要用等待wait. 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverW ...

  6. Sqlite教程(3) SQlite Query

    Configuration是属於util工具包. 把所有环境设置都定义在Configuration工具包里,那麽这个Configuration就是独立的单一入囗. 在架构上,可以提高耦合度,而且出Bu ...

  7. 1)BS和CS区别

    (1)CS:  客户端服务器 BS: 浏览器和服务器 (2)二者区别: 微信就相当于  客户端服务器   同时 微信也有 网页版. BS灵活,不用下客户端,但是网页什么内容都有,就有可能将用户的信息泄 ...

  8. 部署企业本地yum源及源码包安装

    YUM命令 yum list //列出每个软件包(包括未安装和已安装) rpm -q repolist //列出所以仓库名称 info //查看软件信息 rpm -qi install //安装 rp ...

  9. mysql数据库-基础--长期维护

    ###############    数据库    ############## 主要是通过这个学习到什么? 1,库的操作 2,表的操作,包括查询,多表查询,子查询 3,视图,事务,索引,锁, ### ...

  10. JDK9新特性-改进进程管理 API

    Java 9 这个版本对进程管理方面的改进也是相当大的.在为数不多的几次 Java 项目中,有偶尔用到多线程,但对多进程和进程方面的了解还真是太少. 我想,大部分人应该跟我一样,在编程之外知道有进程的 ...