PHP获取指定文件大小、判断文件及目录是否存在、删除文件或目录、复制文件或目录、同时创建多级目录、读取文件内容到字符串中、将字符串写入文件、获取文件名后缀、获取目录大小等。
本函数使用的PHP函数有:file_exists()、mkdir()、filesize、copy、unlink等,这些知识对熟悉PHP中的文件系统操作。
<?php
//PHP判断文件夹和目录是否存在,并获取指定文件大小
class file_dir
{
//检查目录或文件是否存在
function check_exist($filename)
{
if(file_exists($filename))
{
return true;
}else return false;
}
// 一次只能创建一级目录
function create_dir($dirname,$mode=0777)
{
if(is_null($dirname) || $dirname=="") return false;
if(!is_dir($dirname))
{
return mkdir($dirname,$mode);
}
}
//可同时创建多级目录
function createDir($aimUrl)
{
$aimUrl = str_replace('\\', '/', $aimUrl);
$aimDir = '';
$arr = explode('/', $aimUrl);
foreach ($arr as $str)
{
$aimDir .= $str . '/';
if (!file_exists($aimDir))
{
mkdir($aimDir);
}
}
}
//删除目录
function delete_dir($dirname)
{
if($this->check_exist($dirname) and is_dir($dirname))
{
if(!$dirhandle=opendir($dirname)) return false;
while(($file=readdir($dirhandle))!==false)
{
if($file=="." or $file=="..") continue;
$file=$dirname.DIRECTORY_SEPARATOR.$file; //表示$file是$dir的子目录
if(is_dir($file))
{
$this->delete_dir($file);
}else{
unlink($file);
}
}
closedir($dirhandle);
return rmdir($dirname);
}
else return false;
}
//复制目录
function copy_dir($dirfrom,$dirto)
{
if(!is_dir($dirfrom)) return false;
if(!is_dir($dirto)) mkdir($dirto);
$dirhandle=opendir($dirfrom);
if($dirhandle)
{
while(false!==($file=readdir($dirhandle)))
{
if($file=="." or $file=="..") continue;
$filefrom=$dirfrom.DIRECTORY_SEPARATOR.$file; //表示$file是$dir的子目录
$fileto=$dirto.DIRECTORY_SEPARATOR.$file;
if(is_dir($filefrom))
{
$this->copy_dir($filefrom,$fileto);
}
else
{ if(!file_exists($fileto))
copy($filefrom,$fileto);
}
}
}
closedir($dirhandle);
}
//获取目录大小
function getdir_size($dirname)
{
if(!file_exists($dirname) or !is_dir($dirname)) return false;
if(!$handle=opendir($dirname)) return false;
$size=0;
while(false!==($file=readdir($handle)))
{
if($file=="." or $file=="..") continue;
$file=$dirname."/".$file;
if(is_dir($file))
{
$size+=$this->getdir_size($file);
}else{
$size+=filesize($file);
}
}
closedir($handle);
return $size;
}
// 单位自动转换函数
function getReal_size($size)
{
$kb=1024;
$mb=$kb*1024;
$gb=$mb*1024;
$tb=$gb*1024;
if($size<$kb) return $size."B";
if($size>=$kb and $size<$mb) return round($size/$kb,2)."KB";
if($size>=$mb and $size<$gb) return round($size/$mb,2)."MB";
if($size>=$gb and $size<$tb) return round($size/$gb,2)."GB";
if($size>=$tb) return round($size/$tb,2)."TB";
}
//复制文件
function copy_file($srcfile,$dstfile)
{
if(is_file($srcfile))
{
if(!file_exists($dstfile))
return copy($srcfile,$dstfile);
}
else return false;
}
//删除文件
function unlink_file($filename)
{
if($this->check_exist($filename) and is_file($filename))
{
return unlink($filename);
}else return false;
}
//获取文件名后缀
function getsuffix($filename)
{
if(file_exists($filename) and is_file($filename))
{
return end(explode(".",$filename));
}
}
//将字符串写入文件
function input_content($filename,$str)
{
if(function_exists(file_put_contents))
{
file_put_contents($filename,$str);
}else{
$fp=fopen($filename,"wb");
fwrite($fp,$str);
fclose($fp);
}
}
//将整个文件内容读出到一个字符串中
function output_content($filename)
{
if(function_exists(file_get_contents))
{
return file_get_contents($filename);
}else{
$fp=fopen($filename,"rb");
$str=fread($fp,filesize($filename));
fclose($fp);
return $str;
}
}
//将文件内容读出到一个数组中
function output_to_array($filename)
{
$file=file($filename);
$arr=array();
foreach($file as $value)
{
$arr[]=trim($value);
}
return $arr;
}
}//类结束
?>上述文件可保存为file_dir.class.php,使用方法如下:
include 'file_dir.class.php';
$dir=new file_dir;//建立类对象
$size=$dir->getdir_size("D:/wamp/www/class/images");//通过这个类获取指定文件大小
echo $dir->getReal_size($size);//通过这个类获取指定文件大小

