文件操作类

<?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. 0x10 - PostgreSQL 安装之 CentOS7 + Patroni

    PostgreSQL + CentOS7 + Patroni 背景 PostgreSQL 的高可用环境 环境 CentOS 7 pg01 (192.168.1.120) pg02 (192.168.1 ...

  2. E - Rebuild UVALive - 7187 (二次函数极值问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5531 Problem Description Archaeologists find ruins of ...

  3. Opencv笔记(四)——绘图函数

    常用的绘图函数有: cv2.line()       cv2.circle()        cv2.rectangle()      cv2.ellipse()       cv2.putText( ...

  4. auctex 11.86的墓志铭

    卸载了emacs23,在Ubuntu 软件中心搜索并安装了emacs24.3.把auctex11.86也卸载了(自然,在.emacs文件里也注释掉了它的加载路径,但是我不会删去那段代码的.让注释的那段 ...

  5. zabbix数据库占用磁盘空间较大的处理方法

    du -h /* |sort -nr  使用此命令一步步排查发现/var/lib/mysql/zabbix/这个目录占用磁盘空间较大 发现history_log.ibd这个文件最大,达到了38G,此文 ...

  6. 三十八、LNMP潮流组合搭建

    一.安装mysql 数据库 1.1  mysql数据库安装的三种方法: 1)编译安装,在lamp经典组合安装是5.1版本,是configure,make,make install,这里如果是5.5版本 ...

  7. [Algo] 281. Remove Spaces

    Given a string, remove all leading/trailing/duplicated empty spaces. Assumptions: The given string i ...

  8. 吴裕雄--天生自然python学习笔记:python 用pygame模块处理音频文件

    除了对图片. Word 等普通格式的文件进行处理外, Python 还有强大的多媒体文件操作能力,如对音频.视频 文件的操作 . 如果要播放音乐,我们可以用 pygame 包中的 mixer 对 象. ...

  9. logback日志大量写磁盘导致微服务不能正常响应的解决方案

    最近几天,遇到一个莫名其妙的问题,每天几乎同一时段微服务自己跑着跑着就假死了,过几个小时就又自动恢复了. 通过对定时任务.网卡.内存.磁盘.业务日志的排查分析,只有磁盘的IO在假死前一段时间偏高,经查 ...

  10. Self-examination

    第一次参加省赛,算是真正感受到比赛的残酷.拿到好成绩,需要平时大量的积累,甚至也需要一点运气,然后我还做的不够,但我觉得我可以做得更好. 我之前是没有任何基础,大一才刚刚从知码开门入门.然后刚开始一直 ...