<?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。

最新文章

  1. SQL语句增加字段、修改字段、修改类型、修改默认值
  2. Android判断当前线程是否是主线程的方法
  3. Windows和Linux上用C与Lua交互
  4. [USACO 3.1.4]rect1(漂浮法/矩形切割)
  5. js “+” 连接字符串&amp;数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用
  6. ASP.NET MVC5 高级编程 第5章 表单和HTML辅助方法
  7. 祭奠我的csdn博客
  8. SpringMVC注册拦截器
  9. Win7x64安装Oracle11201x64 解决PLSQL Developer无法找到oci问题
  10. 03-OC实例方法、内存管理
  11. 当react框架遇上百度地图
  12. PHP Laravel框架入门心得 | How to study PHP Laravel Framework
  13. UE4 打包C++项目到win32平台报错 could not find mspdbcore.dll
  14. 经典排序js实现
  15. centos7 设置时区和时间
  16. JAVA Eclipse打开报错failed to load the jni shared library怎么办
  17. 小白学习之Code First(五)
  18. eclipse新建maven工程的各种坑
  19. notepad++支持自定义文件类型
  20. 如何在HPUX的终端提示符前显示当前登录用户信息和所在目录

热门文章

  1. Kernel Mode, User Mode
  2. SQL Server 部署CLR程序集错误`6218`
  3. 【python】python 中的三元表达式(三目运算符)
  4. 【bzoj2453】维护队列/【bzoj2120】数颜色 分块+二分
  5. hdu 6203 ping ping ping(LCA+树状数组)
  6. BZOJ2001 [Hnoi2010]City 城市建设 【CDQ分治 + kruskal】
  7. BZOJ2631 tree(伍一鸣) LCT 秘制标记
  8. 妮可妮可妮 [Hash]
  9. webstorm中把style的内容隐藏,如何把style的内容展开?
  10. kafka.common.ConsumerRebalanceFailedException异常解决