PHP的文件操作类
<?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的文件操作类的更多相关文章
- [C#] 常用工具类——文件操作类
/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在&l ...
- 文件操作类CFile
CFile file; CString str1= L"写入文件成功!"; wchar_t *str2; if (!file.Open(L"Hello.txt" ...
- asp.net文件操作类
/** 文件操作类 **/ #region 引用命名空间 using System; using System.Collections.Generic; using System.Text; usin ...
- android 文件操作类简易总结
android 文件操作类(参考链接) http://www.cnblogs.com/menlsh/archive/2013/04/02/2997084.html package com.androi ...
- Ini文件操作类
/// <summary> /// Ini文件操作类 /// </summary> public class Ini { // 声明INI文件的写操作函数 WritePriva ...
- java csv 文件 操作类
一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...
- Qt5:Qt文件操作类 QFile
在QT中,操作文件一般不使用C++提供的文件操作类 , 因为操作文件的时候,要用到C++提供的 string 类,而在QT中使用的是Qt自己实现的一个string类 QString .在Qt中使用C+ ...
- C# 文件操作类大全
C# 文件操作类大全 时间:2015-01-31 16:04:20 阅读:1724 评论:0 收藏:0 [点我收藏+] 标签: 1.创建文件夹 //usin ...
- Java文件操作类效率对比
前言 众所周知,Java中有多种针对文件的操作类,以面向字节流和字符流可分为两大类,这里以写入为例: 面向字节流的:FileOutputStream 和 BufferedOutputStream 面向 ...
- JAVA文件操作类和文件夹的操作代码示例
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
随机推荐
- 解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错
解决Linux下启动Tomcat遇到Neither the JAVA_HOME ...报错 Neither the JAVA_HOME nor the JRE_HOME environment var ...
- JSP动作标识
jsp中include有两种形式: include指令:<%@ include file=""%> include动作:<jsp:include page=&qu ...
- 【bzoj1061】[NOI2008]志愿者招募 线性规划与费用流
题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...
- 【题解】MUTC2013idiots
我是先知道的这题是FFT然后再做的,知道是FFT其实就是个套路题啦.首先,我们容易发现 \(P = \frac{a}{b}\) 其中a表示合法的方案数,而b表示全部的方案数. b的值即为\(C\lef ...
- 2014end
人.事.物. 人一年了,从十六班到十六班,从j101到j101再到A207. 她:结婚,然后走了.就是这样,干脆得我都来不及留恋.是的,再也听不到她那很温柔语气,看不到她偶尔激动时就踮起脚尖.还记得晚 ...
- HTML5 canvas流体力学效果
某人用Java搞了一个流体力学的演示:http://grantkot.com/MPM/Liquid.html. 下面是 HTML 5版的流体力学演示(推荐使用Chrome浏览器浏览): 效果演示 &l ...
- WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)
今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle).本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应 ...
- Codis+redis 集群测试
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用 ...
- Nginx配置配置文件详解
文章目录 配置文件 nginx.conf配置文件详解 用于调试.定位问题的配置参数 正常运行必备的配置参数 优化性能的配置参数 事件相关配置 Fastcgi相关配置参数 常需要调整的参数 nginx作 ...
- hdu 2544 最短路 (dijkstra,floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 题目大意:找到两点间最短的距离值. 代码一:(dijkstra算法) #include < ...