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文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
随机推荐
- 正则表达式之旅_sed_awk
谈谈正则表达式这个东西: 我想作为一个程序员,正则表达式大家绝对不陌生. 正则表达式好像一个有限则动机.主要作用是匹配,但是同时因为这个功能,我们可以扩展很多其他用法 像很多语言都引人了正则表达式:j ...
- 在es中用scroll查询与completableFuture
一般而言,es返回数据的上限是10000条,如果超过这个数量,就必须使用scroll查询. 所谓scroll查询就类似DBMS中的游标,或者快照吧,利用查询条件,在第一次查询时,在所有的结果上形成了一 ...
- 移动开发:美团外卖Android Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- [Leetcode] word break 拆分词语
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...
- PHP 5.4语法改进与弃用特性
PHP 5.4于本月尘埃落定,它是 PHP 自 2009 年以来的首次重大更新.该版本对语言部分进行了增强,包括支持 Traits 和移除部分争议特性. Traits 同 Java 和 .NET 一样 ...
- Palindrome [Manecher]
Palindrome Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 12214 Accepted: 4583 Descript ...
- POJ1511:Invitation Cards(最短路)
Invitation Cards Time Limit: 8000MS Memory Limit: 262144K Total Submissions: 34743 Accepted: 114 ...
- PHP报错Cannot adopt OID in UCD-SNMP-MIB、 LM-SENSORS-MIB
Cannot adopt OID in UCD-SNMP-MIB: Cannot adopt OID in LM-SENSORS-MIB: lmTempSensorsValue 运行PHP遇到这些错误 ...
- Docker Community Edition for CentOS
Docker CE for CentOS Docker CE for CentOS distribution is the best way to install the Docker platfor ...
- NSMutableArray遍历删除注意事项
for (int i = 0; i < [array count]; i++) { [array removeObjectAtIndex:i]; } 上面的遍历由于在remove操作之后ar ...