PHP常用技术文之文件操作和目录操作总结 |
|
本文标签:PHP,文件操作,目录操作 一、基本文件的操作 文件的基本操作有:文件判断、目录判断、文件大小、读写性判断、存在性判断及文件时间等
<?php
header("content-type","text/html;charset=utf-8");
/*
*声明一个函数,传入文件名获取文件属性
*@param string $fileName 文件名称
*/
function getFilePro($fileName)
{
if(!file_exists($fileName))
{
echo 文件不存在<br/>;
return;
}
/*是否是普通文件*/
if(is_file($fileName))
{
echo $fileName.是一个文件<br/>;
}
/*是否是目录*/
if(is_dir($fileName))
{
echo $fileName.是一个目录;
}
/*输出文件的型态*/
echo 文件型态是:.getFileType($fileName).<br/>;
/*文件大小,转换单位*/
echo 文件大小是:.getFileSize(filesize($fileName)).<br/>;
/*文件是否可读*/
if(is_readable($fileName))
{
echo 文件可读<br/>;
}
/*文件是否可写*/
if(is_writable($fileName))
{
echo 文件可写<br/>;
}
/*文件是否可执行*/
if(is_executable($fileName))
{
echo 文件可执行<br/>;
}
echo 文件创立时间:.date(Y年m月j日,filectime($fileName)).<br/>;
echo 文件最后修改时间:.date(Y年m月j日,filemtime($fileName)).<br/>;
echo 文件最后打开时间:.date(Y年m月j日,fileatime($fileName)).<br/>;
}
/*
*声明一个函数,返回文件类型
*@param string $fileName 文件名称
*/
function getFileType($fileName)
{
$type = ;
switch(filetype($fileName))
{
case file:$type .= 普通文件;break;
case dir:$type .= 目录文件;break;
case block:$type .= 块设备文件;break;
case char:$type .= 字符设备文件;break;
case filo:$type .= 管道文件;break;
case link:$type .= 符号链接;break;
case unknown:$type .= 未知文件;break;
default:
}
return $type;
}
/*
*声明一个函数,返回文件大小
*@param int $bytes 文件字节数
*/
function getFileSize($bytes)
{
if($bytes >= pow(2,40))
{
$return = round($bytes / pow(1024,4),2);
$suffix = TB;
}
else if($bytes >= pow(2,30))
{
$return = round($bytes / pow(1024,3),2);
$suffix = GB;
}
else if($bytes >= pow(2,20))
{
$return = round($bytes / pow(1024,2),2);
$suffix = MB;
}
else if($bytes >= pow(2,10))
{
$return = round($bytes / pow(1024,1),2);
$suffix = KB;
}
else
{
$return = $bytes;
$suffix = B;
}
return $return." ".$suffix;
}
/*调用函数,传入test目录下的test.txt文件*/
getFilePro(./test/div.html);
?>
结果:
二、目录的操作 目录的操作有:遍历目录、删除、复制、大小统计等 1、遍历目录
/*
*遍历目录
*@param string $dirName 目录名
*/
function findDir($dirName)
{
$num = 0; /*统计子文件个数*/
$dir_handle = opendir($dirName); /*打开目录*/
/*输出目录文件*/
echo <table border="0" align="center" width="600" cellspacing="0" cellpadding="0">;
echo <caption><h2>目录.$dirName.下的文件</h2></caption>;
echo <tr align="left" bgcolor="#cccccc";
echo <th>文件名</th><th>文件大小</th><th>文件类型</th><th>修改时间</th></tr>;
while($file = readdir($dir_handle))
{
$dirFile = $dirName./.$file;
$bgcolor = $num++%2==0?#ffffff:#cccccc;
echo <tr bgcolor=.$bgcolor.>;
echo <td>.$file.</td>;
echo <td>.filesize($dirFile).</td>;
echo <td>.filetype($dirFile).</td>;
echo <td>.date(Y/n/t,filemtime($dirFile)).</td>;
echo </tr>;
}
echo "</table>";
closedir($dir_handle); /*关闭目录*/
echo "在<b>".$dirName."</b>目录下共有<b>".$num.</b>个子文件;
}
/*传递当前目录下的test目录*/
findDir(./test);
结果
2、统计目录大小
/*
*统计目录大小
*@param string $dirName 目录名
*@return double
*/
function dirSize($dirName)
{
$dir_size = 0;
if($dir_handle = @opendir($dirName))
{
while ($fileName = readdir($dir_handle))
{
/*排除两个特殊目录*/
if($fileName != . && $fileName != ..)
{
$subFile = $dirName./.$fileName;
if(is_file($subFile))
{
$dir_size += filesize($subFile);
}
if(is_dir($subFile))
{
$dir_size += dirSize($subFile);
}
}
}
closedir($dir_handle);
return $dir_size;
}
}
/*传递当前目录下的test目录*/
$dir_size = dirSize(./test);
echo ./test目录文件大小是:.round($dir_size / pow(1024,1),2).KB;
结果:
3、删除目录
/*
*删除目录
*@param string $dirName 目录名
*/
function delDir($dirName)
{
/*php中的mkdir函数就可以创建目录*/
if(file_exists($dirName))
{
if($dir_handle = @opendir($dirName))
{
while ($fileName = readdir($dir_handle))
{
/*排除两个特殊目录*/
if($fileName != . && $fileName != ..)
{
$subFile = $dirName./.$fileName;
if(is_file($subFile))
{
unlink($subFile);
}
if(is_dir($subFile))
{
delDir($subFile);
}
}
}
closedir($dir_handle);
rmdir($dirName);
return $dirName.目录已经删除;
}
}
}
/*传递test目录的副本test1*/
echo delDir(./test1);
删除成功的提示信息
4、复制目录
/*
*复制目录
*@param string $dirSrc 原目录名
*@param string $dirTo 目标目录名
*/
function copyDir($dirSrc,$dirTo)
{
if(is_file($dirTo))
{
echo 目标目录不能创建;/*目标不是一个*/
return;
}
if(!file_exists($dirTo))
{
/*目录不存在则创建*/
mkdir($dirTo);
}
if($dir_handle = @opendir($dirSrc))
{
while ($fileName = readdir($dir_handle))
{
/*排除两个特殊目录*/
if($fileName != . && $fileName != ..)
{
$subSrcFile = $dirSrc./.$fileName;
$subToFile = $dirTo./.$fileName;
if(is_file($subSrcFile))
{
copy($subSrcFile,$subToFile);
}
if(is_dir($subSrcFile))
{
copyDir($subSrcFile,$subToFile);
}
}
}
closedir($dir_handle);
return $dirSrc.目录已经复制到.$dirTo.目录;
}
}
echo copyDir(./test,../testcopy);
|