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("\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创建缓存文件的更多相关文章
- 创建缓存文件(。php)
public function user_dengji(){ $this->sdb->select('groupid,grouptitle'); $query ...
- 创建TPL自定义模板
文件布局 <!--1d7c7a527b6335cc7a623305ca940e1findex.tpl.html--> <!DOCTYPE html PUBLIC "-//W ...
- Android实现TCP断点上传,后台C#服务实现接收
终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证, ...
- CRL快速开发框架开源完全转到Github
CRL简介 CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工 ...
- CRL快速开发框架升级到3.1
CRL是一款面向对象的轻量级ORM框架,本着快速开发,使用简便的原则,设计为 无需关心数据库结构,CRL自动维护创建,即写即用(CRL内部有表结构检查机制,保证表结构一致性) 无需第三方工具生成代理类 ...
- 转:Java.file
类 java.io.File 的使用 使用 File 的软件包 java.awt 包含用于创建用户界面和绘制图形图像的所有类. java.io 通过数据流.序列化和文件系统提供系统输入和输出. jav ...
- PHP文件缓存实现
有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些共更能: 功能实现:get.set.has.increment.d ...
- Android中关于Volley的使用(五)从RequestQueue开始来深入认识Volley
在前面的几篇文章中,我们学习了如何用Volley去网络加载JSON数据,如何利用ImageRequest和NetworkImageView去网络加载数据,而关于Volley的使用,我们都是从下面一行代 ...
- IOS开发之异步加载网络图片并缓存本地实现瀑布流(二)
/* * @brief 图片加载通用函数 * @parma imageName 图片名 */ - (void)imageStartLoading:(NSString *)imageName{ NSUR ...
随机推荐
- Android开发学习2--Android Studio目录结构、Module目录介绍、Android创建及运行和HelloWord的扩展----极其简单的游戏界面
学习笔记: 1.Android Studio项目结构 Android Studio提供了很多项目结构,最常用的是Android 和 project Project列举出了所有文件. 建议使用Andro ...
- 指定linux 下默认python版本
sudo rm -rf python sudo ln -s /usr/bin/python3 /usr/bin/python
- c++ 装饰器模式/包装模式
理解 使用两个隔离又继承自统一接口类的对象:方法对象(抽象/具体), 包装器对象(抽象/具体)实现多种组合只需要 n + m种实现, 而对比直接继承,则需要n*m 种实现,因此在面对多种具体类和多种额 ...
- 解决python pip 出现read time out问题
出现read time out问题是一般由于python包被墙导致下载速度变慢,pip下载超时. 解决方法一: 添加 --default-timeout:自定义timeout时间,一般能解决大部分ti ...
- J. Stone game(背包问题)
题:https://nanti.jisuanke.com/t/41420 定义 dp[x][y] 表示第 x 个数到最后一个数能组成和为 y 的方案数 #include<bits/stdc++. ...
- 存储映射I/O函数
1.void * mmap((void *addr, size_t length, int prot, int flags, int fd, off_t offset) 参数: addr:用于指定映 ...
- UFT场景恢复
场景恢复: 在脚本运行中可能会出现一些非预期事件.错误.程序崩溃等情况,阻止脚本继续执行下去,在此情况下脚本可能暂停执行, 直到某些界面被操作之后才会继续执行下去,为了处理这一类事件因此存在场景恢复. ...
- Emgu.CV.CvInvoke的类型初始值设定项引发异常”TypeInitializationException”的问题
问题如图: 解决方案: 1.记住EmguCV的安装位置:X:\XXX\XXX… 本测试方案中EmguCV的安装位置:D:\Emgu,操作时记得用自己的EmguCV安装路径替换掉D:\Emgu. 2.添 ...
- GitHub之初始化
1.github上新建repository. 2.本地 mkdir git-init-demo. 3.cd git-init-demo. 4.git clone https://github.com/ ...
- js各继承方法的优缺点
在js中有很多种继承的方法,下面总结这些方法的优缺点. ####1.原型链继承 优点: 非常纯粹的继承关系,实例是子类的实例,也是父类的实例 父类新增原型方法/原型属性,子类都能访问到 简单,易于实现 ...