文件操作类

<?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. jdk8下载地址

    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html Java SE Binaries ...

  2. 学习spring第三天

    Spring第三天笔记 今日内容 Spring的核心之一 -  AOP思想 (1) 代理模式- 动态代理 ① JDK的动态代理 (Java官方) ② CGLIB 第三方代理 (2) AOP思想在Spr ...

  3. MyBatis从入门到精通(第4章):MyBatis动态SQL【if、choose 和 where、set、trim】

    (第4章):MyBatis动态SQL[if.choose 和 where.set.trim] MyBatis 的强大特性之一便是它的动态 SQL.MyBatis 3.4.6版本采用了功能强大的OGNL ...

  4. 线程池-进程池-io模型

    一.线程池与进程池 什么是池?简单的说就是一个容器,一个范围 在保证计算机硬件安全的情况下最大限度的充分利用计算机, 池其实是降低了程序的运行效率,但是保证了计算机硬件的安全,也是实现了一个并发的效果 ...

  5. unless|until|LABEL|{}|last|next|redo| || |//|i++|++i

    #!/usr/bin/perl use strict; use warnings; $_ = 'oireqo````'; unless($_ =~ /^a/m){print "no matc ...

  6. tesseract系列(2) -- tesseract的使用

    上文说了怎么编译成库,这次说说怎么使用,先验证下编译出来的结果. 下图是debug生成的文件,里面有个tesseract的应用程序. cmd进入目录下,执行命令:tesseract eurotext. ...

  7. Git log 中文乱码

    以下三条命令搞定(系统是centos  7.4) git config --global i18n.commitencoding utf-8 git config --global i18n.logo ...

  8. 对象数组和for循环遍历输出学生的信息

    public class Student { private int no; private String name; private int age; public Student(int no, ...

  9. 21)PHP,杨辉三角

    代码展示: $n=; ;$i<=$n;$i++){ ;$k<=$i;$k++){ ||$k==$i){ $arr[$i][$k]=; }else{ ){ $arr[$i][$k] = $a ...

  10. Eclipse中配置使用本地schema或dtd文件

    问题:在设备不能正常联网的情况下,无法获取到网络上的 dtd 或 schema,编写配置文件的 XML 文档就没有了提示功能. 一般情况下,下载的 Jar 包或者 Zip 包中都会包含需要的 sche ...