近日学习php语言,学习到了文件系统管理,在这里做一下记录。
1.显示文件的相关属性:
<?php
function getFilePro($fileName){
if(!file_exists($fileName)){
echo "目标文件不存在!!<br>";
return;
}
if(is_file($fileName)){
echo $fileName."是一个文件。<br>";
}
if(is_dir($fileName))
echo $fileName."是一个目录<br>";
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>";
}
function getFileType($fileName){
switch(fileType($fileName)){
case 'file': $type = "普通文件"; break;
case 'dir': $type = "目录"; break;
default; $type = "未检测到类型";
}
return $type;
}
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 = "Byte";
}
return $return." ".$suffix;
}
getFilePro("test.php");//输入一个当前目录的可执行文件
?>
2.遍历目录函数
<?php
$num = 0;
$dirname = 'F:/../test.php';//输入一个文件路径,如: F:/../../test.php
$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>个';
?>
3.统计目录大小
<?php
function dirSize($dirname){
$dir_size = 0;
if($dir_handle = @opendir($dirname)){ //用于判断该路径是否可以打开;@是用于忽略报错信息,使程序继续执行。
while($filename = readdir($dir_handle)){
if($filename != "."&&$filename!=".."){//排除两个特殊的目录
$subFile = $dirname."/".$filename;
if(is_dir($subFile)) //若为目录,递归调用自身函数,求子目录大小
$dir_size += dirSize($subFile);
if(is_file($subFile))//若为文件,求出文件的大小并进行累加
$dir_size += filesize($subFile);
}
}
closedir($dir_handle);
return $dir_size;
}
}
$dir_size = dirSize("");//输入,可执行的路径
echo round($dir_size/pow(1024,1),2)."KB";
?>
4.建立和删除目录
php中使用mkdir()函数只需传入一个目录名即可很容易的建立一个新目录,但是用删除目录函数rmdir()则更为复杂,其只能删除一个空目录且空目录必须存在,否则需要先将目录清空。具体实现如下:
<?php
function delDir($directory){
if(file_exists($directory)){
if($dir_handle=@opendir($directory)){
while($filename = readdir($dir_handle)){
if($filename != "."&&$filename != ".."){
$subFile = $directory."/".$filename;
if(is_dir($subFile))
delDir ($subFile);
if(is_file($subFile))
unlink ($subFile);
}
}
closedir($dir_handle);
rmdir($directory);
}
}
}
delDir("");//输入要删除的目录路径
?>
5.复制目录
<?php
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_dir($subSrcFile))
copyDir ($subSrcFile, $subToFile);
if(is_file($subSrcFile))
copy($subSrcFile, $subToFile);
}
}
closedir($dir_handle);
}
}
copyDir("", "");//第一个为原目录路径 第二个为复制目标目录路径
?>