<?php
class file {
function file() {
die("Class file can not instantiated!");
}
//创建目录
function forcemkdir($path){
if(!file_exists($path)){
file::forcemkdir(dirname($path));
mkdir($path,0777);
}
}
//检测文件是否存在
function iswriteable($file){
$writeable=0;
if(is_dir($file)){
$dir=$file;
if($fp=@fopen("$dir/test.txt",'w')){
@fclose($fp);
@unlink("$dir/test.txt");
$writeable=1;
}
}else{
if($fp=@fopen($file,'a+')){
@fclose($fp);
$writeable=1;
}
}
return $writeable;
}
//删除当前目录下的文件或目录
function cleardir($dir,$forceclear=false) {
if(!is_dir($dir)){
return;
}
$directory=dir($dir);
while($entry=$directory->read()){
$filename=$dir.'/'.$entry;
if(is_file($filename)){
@unlink($filename);
}elseif(is_dir($filename)&$forceclear&$entry!='.'&$entry!='..'){
chmod($filename,0777);
file::cleardir($filename,$forceclear);
rmdir($filename);
}
}
$directory->close();
}
//删除当前目录及目录下的文件
function removedir($dir){
if (is_dir($dir) && !is_link($dir)){
if ($dh=opendir($dir)){
while (($sf= readdir($dh))!== false){
if('.'==$sf || '..'==$sf){
continue;
}
file::removedir($dir.'/'.$sf);
}
closedir($dh);
}
return rmdir($dir);
}
return @unlink($dir);
}
//复制文件
function copydir($srcdir, $dstdir) {
if(!is_dir($dstdir)) mkdir($dstdir);
if($curdir = opendir($srcdir)) {
while($file = readdir($curdir)) {
if($file != '.' && $file != '..') {
$srcfile = $srcdir . '/' . $file;
$dstfile = $dstdir . '/' . $file;
if(is_file($srcfile)) {
copy($srcfile, $dstfile);
}
else if(is_dir($srcfile)) {
file::copydir($srcfile, $dstfile);
}
}
}
closedir($curdir);
}
}
//读取文件
function readfromfile($filename) {
if ($fp=@fopen($filename,'rb')) {
if(PHP_VERSION >='4.3.0' && function_exists('file_get_contents')){
return file_get_contents($filename);
}else{
flock($fp,LOCK_EX);
$data=fread($fp,filesize($filename));
flock($fp,LOCK_UN);
fclose($fp);
return $data;
}
}else{
return '';
}
}
//写入文件
function writetofile($filename,$data){
if($fp=@fopen($filename,'wb')){
if (PHP_VERSION >='4.3.0' && function_exists('file_put_contents')) {
return @file_put_contents($filename,$data);
}else{
flock($fp, LOCK_EX);
$bytes=fwrite($fp, $data);
flock($fp,LOCK_UN);
fclose($fp);
return $bytes;
}
}else{
return
}
}
//上传文件
function uploadfile($attachment,$target,$maxsize=1024,$is_image=1){
$result=array ('result'=>false,'msg'=>'upload mistake');
if($is_image){
$attach=$attachment;
$filesize=$attach['size']/1024;
if(0==$filesize){
$result['msg'] = '上传错误';
return $result;
}
if(substr($attach['type'],0,6)!='image/'){
$result['msg'] ='格式错误';
return $result;
}
if($filesize>$maxsize){
$result['msg'] ='文件过大';
return $result;
}
}else{
$attach['tmp_name']=$attachment;
}
$filedir=dirname($target);
file::forcemkdir($filedir);
if(@copy($attach['tmp_name'],$target) || @move_uploaded_file($attach['tmp_name'],$target)){
$result['result']=true;
$result['msg'] ='上传成功';
}
if(!$result['result'] && @is_readable($attach['tmp_name'])){
@$fp = fopen($attach['tmp_name'], 'rb');
@flock($fp, 2);
@$attachedfile = fread($fp, $attach['size']);
@fclose($fp);
@$fp = fopen($target, 'wb');
@flock($fp,2);
if(@fwrite($fp, $attachedfile)) {
@unlink($attach['tmp_name']);
$result['result']=true;
$result['msg']= '上传失败';
}
@fclose($fp);
}
return $result;
}
function hheader($string, $replace = true, $http_response_code = 0){
$string = str_replace(array("\r", "\n"), array('', ''), $string);
if(emptyempty($http_response_code) || PHP_VERSION <'4.3'){
@header($string, $replace);
}else{
@header($string, $replace, $http_response_code);
}
if(preg_match('/^\s*location:/is', $string)){
exit();
}
}
//下载文件
function downloadfile($filepath,$filename=''){
global $encoding;
if(!file_exists($filepath)){
return 1;
}
if(''==$filename){
$tem=explode('/',$filepath);
$num=count($tem)-1;
$filename=$tem[$num];
$filetype=substr($filepath,strrpos($filepath,".")+1);
}else{
$filetype=substr($filename,strrpos($filename,".")+1);
}
$filename ='"'.(strtolower($encoding) == 'utf-8' && !(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') === FALSE) ? urlencode($filename) : $filename).'"';
$filesize = filesize($filepath);
$dateline=time();
file::hheader('date: '.gmdate('d, d m y h:i:s', $dateline).' gmt');
file::hheader('last-modified: '.gmdate('d, d m y h:i:s', $dateline).' gmt');
file::hheader('content-encoding: none');
file::hheader('content-disposition: attachment; filename='.$filename);
file::hheader('content-type: '.$filetype);
file::hheader('content-length: '.$filesize);
file::hheader('accept-ranges: bytes');
if(!@emptyempty($_SERVER['HTTP_RANGE'])) {
list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE'])));
$rangesize = ($filesize - $range) > 0 ? ($filesize - $range) : 0;
file::hheader('content-length: '.$rangesize);
file::hheader('http/1.1 206 partial content');
file::hheader('content-range: bytes='.$range.'-'.($filesize-1).'/'.($filesize));
}
if($fp = @fopen($filepath, 'rb')) {
@fseek($fp, $range);
echo fread($fp, filesize($filepath));
}
fclose($fp);
flush();
ob_flush();
}
//返回文件类型
function extname($filename){
$pathinfo=pathinfo($filename);
return strtolower($pathinfo['extension']);
}
function createaccessfile($path){
if(!file_exists($path.'index.htm')){
$content=' ';
file::writetofile($path.'index.htm',$content);
}
if(!file_exists($path.'.htaccess')){
$content='Deny from all';
file::writetofile($path.'.htaccess',$content);
}
}
//返回文件大小
function getdirsize($filedir){
$handle=opendir($filedir);
while($filename=readdir($handle)){
if ('.' != $filename && '..' != $filename){
$totalsize += is_dir($filedir.'/'.$filename) ? file::getdirsize($filedir.'/'.$filename) : (int)filesize($filedir.'/'.$filename);
}
}
return $totalsize;
}
}
?>

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
更多技术文章请搜索千锋PHP,做真实的自己,用良心做教育。
互联网+时代,时刻要保持学习,携手千锋PHP,Dream It Possible。

PHP的文件操作类的更多相关文章

  1. [C#] 常用工具类——文件操作类

    /// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...

  2. 文件操作类CFile

    CFile file; CString str1= L"写入文件成功!"; wchar_t *str2; if (!file.Open(L"Hello.txt" ...

  3. asp.net文件操作类

    /** 文件操作类 **/ #region 引用命名空间 using System; using System.Collections.Generic; using System.Text; usin ...

  4. android 文件操作类简易总结

    android 文件操作类(参考链接) http://www.cnblogs.com/menlsh/archive/2013/04/02/2997084.html package com.androi ...

  5. Ini文件操作类

    /// <summary> /// Ini文件操作类 /// </summary> public class Ini { // 声明INI文件的写操作函数 WritePriva ...

  6. java csv 文件 操作类

    一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...

  7. Qt5:Qt文件操作类 QFile

    在QT中,操作文件一般不使用C++提供的文件操作类 , 因为操作文件的时候,要用到C++提供的 string 类,而在QT中使用的是Qt自己实现的一个string类 QString .在Qt中使用C+ ...

  8. C# 文件操作类大全

      C# 文件操作类大全 时间:2015-01-31 16:04:20      阅读:1724      评论:0      收藏:0      [点我收藏+] 标签: 1.创建文件夹 //usin ...

  9. Java文件操作类效率对比

    前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...

  10. JAVA文件操作类和文件夹的操作代码示例

    JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...

随机推荐

  1. 解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错

    解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错 Neither the JAVA_HOME nor the JRE_HOME environment var ...

  2. JSP动作标识

    jsp中include有两种形式: include指令:<%@ include file=""%> include动作:<jsp:include page=&qu ...

  3. 【bzoj1061】[NOI2008]志愿者招募 线性规划与费用流

    题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...

  4. 【题解】MUTC2013idiots

    我是先知道的这题是FFT然后再做的,知道是FFT其实就是个套路题啦.首先,我们容易发现 \(P = \frac{a}{b}\) 其中a表示合法的方案数,而b表示全部的方案数. b的值即为\(C\lef ...

  5. 2014end

    人.事.物. 人一年了,从十六班到十六班,从j101到j101再到A207. 她:结婚,然后走了.就是这样,干脆得我都来不及留恋.是的,再也听不到她那很温柔语气,看不到她偶尔激动时就踮起脚尖.还记得晚 ...

  6. HTML5 canvas流体力学效果

    某人用Java搞了一个流体力学的演示:http://grantkot.com/MPM/Liquid.html. 下面是 HTML 5版的流体力学演示(推荐使用Chrome浏览器浏览): 效果演示 &l ...

  7. WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)

    今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle).本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应 ...

  8. Codis+redis 集群测试

    Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用 ...

  9. Nginx配置配置文件详解

    文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...

  10. hdu 2544 最短路 (dijkstra,floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找到两点间最短的距离值. 代码一:(dijkstra算法) #include < ...