Web 在线文件管理器学习笔记与总结(10)查看文件夹中的内容

① 读取文件夹大小

a. 封装计算文件夹大小的函数

b.  打开文件夹

c. 循环判断文件夹下的内容是文件还是文件夹,如果是文件,则累积相加文件的大小;如果是文件夹,则递归调用该函数

注意两个问题:

a. 在计算每个文件夹大小之前,应该清空变量 $size,否则文件夹大小会累加(index.php)

<td><?php $size = 0; echo transByte(dirSize($p));?></td>

b. 在计算文件夹大小的方法中,$size 应该设置为全局变量(dir.func.php)

//得到文件夹大小
function dirSize($path){
    $handle = opendir($path);
    $size = 0;
    //static $size;
    global $size;
    while(($item = readdir($handle)) !== false){
        if($item != '.' && $item != '..'){
            if(is_file($path.'/'.$item)){
                $size += filesize($path.'/'.$item);
            }else if(is_dir($path.'/'.$item)){
                dirSize($path.'/'.$item);
                //递归的另一种写法
                //$func = __FUNCTION__;
                //$func($path.'/'.$item);
            }
        }
    }
    closedir($handle);
    return $size;
}

index.php:

<?php 
require 'dir.func.php';
require 'file.func.php';
require 'common.func.php';
$path = 'file';
$info = readDirectory($path);

$act = @$_REQUEST['act'];
$filename = @$_REQUEST['filename'];
//跳转变量
$redirect = "index.php?path={$path}";
if($act == 'createFile'){
    //创建文件
    $mes = createFile($path.'/'.$filename);
    alertMes($mes,$redirect);
}else if($act == 'showContent'){
//查看文件内容
    $content=file_get_contents($filename);
    //echo "<textarea readonly='readonly' cols='100' rows='10'>{$content}</textarea>";
    //高亮显示PHP代码
    //高亮显示字符串中的PHP代码
    if(strlen($content)){
    $newContent=highlight_string($content,true);
    //高亮显示文件中的PHP代码
    //highlight_file($filename);
    $str=<<<EOF
    <table width='100%' bgcolor='pink' cellpadding='5' cellspacing="0" >
        <tr>
            <td>$newContent</td>
        </tr>
    </table>
EOF;
        echo $str;
    }else{
        alertMes("文件没有内容,请编辑再查看!",$redirect);
    }
}else if($act == 'editContent'){
    $content = file_get_contents($filename);
    $str=<<<EOF
    <form action='index.php?act=doEdit' method='post'>
    <textarea name='content'  cols='100' rows='10'>$content</textarea></br>
    <input type='hidden' name='filename' value='{$filename}'>
    <input type='submit' value='修改文件内容'>
    </form>
EOF;
    echo $str; 
}else if($act == 'doEdit'){
    //修改文件内容
    $content = $_POST['content'];
    if(file_put_contents($filename, $content)){
        $mes = '文件修改成功';
    }else if(!$content){
        $mes = '文件内容被清空';
    }else{
        $mes = '文件修改失败';
    }
    alertMes($mes,$redirect);
}else if($act == 'renameFile'){
    //重命名文件
    $str = <<<EOF
    <form action='index.php?act=doRename' method='post'>
        请填写新文件名:<input type="text" name="newname" placeholder="重命名">
        <input type="hidden" name="filename" value='$filename'>
    <input type='submit' value='重命名'>
    </form>        
EOF;
echo $str;
}else if($act == 'doRename'){
    //实现重命名操作
    $newname = $_POST['newname'];
    $mes = renameFile($filename,$newname);
    alertMes($mes,$redirect);
}else if($act == 'delFile'){
    $mes = delFile($filename);
    alertMes($mes,$redirect);
}else if($act == 'downFile'){
    downFile($filename);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="cikonss.css" />
<link rel="stylesheet" href="common.css" />
<script src="jquery-1.8.3.min.js"></script>
<script src="jquery-ui-1.11.3/jquery-ui.min.js"></script>
<link rel="stylesheet" href="jquery-ui-1.11.3/jquery-ui.min.css" />
</head>
<body>
<div id="showDetail" style="display:none"><img src="" alt="" id="showImg"></div>
<h1>在线文件管理器</h1>
<div id="top">
    <ul id="navi">
        <li><a href="index.php" title="主目录"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-home"></span></span></a></li>
        <li><a href="#" onclick="show('createFile')" title="新建文件" ><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-file"></span></span></a></li>
        <li><a href="#" title="新建文件夹"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-folder"></span></span></a></li>
        <li><a href="#" title="上传文件"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-upload"></span></span></a></li>
        <li><a href="#" title="返回上级目录"><span style="margin-left: 8px; margin-top: 0px; top: 4px;" class="icon icon-small icon-square"><span class="icon-arrowLeft"></span></span></a></li>
    </ul>
</div>
<form action="index.php" method="post" enctype="multipart/form-data">
<table width='100%' border='1' cellpadding="5" cellspacing="0" bgcolor="#abcdef" align="center">
    <tr id="createFolder"  style="display:none;">
        <td>请输入文件夹名称</td>
        <td >
            <input type="text" name="dirname" />
            <input type="hidden" name="path"  value="<?php echo $path;?>"/>
            <input type="submit"  name="act"  value="创建文件夹"/>
        </td>
    </tr>
    <tr id="createFile"  style="display:none;">
        <td>请输入文件名称</td>
        <td >
            <input type="text"  name="filename" />
            <input type="hidden" name="path" value="<?php echo $path;?>"/>
            <input type="hidden" name='act' value='createFile'/>
            <input type="submit" value="创建文件" />    
        </td>
    </tr>
    <tr id="uploadFile" style="display:none;">
        <td >请选择要上传的文件</td>
        <td ><input type="file" name="myFile" />
            <input type="submit" name="act" value="上传文件" />    
        </td>
    </tr>
    <tr align="center">
        <td>编号</td>
        <td>名称</td>
        <td>类型</td>
        <td>大小</td>
        <td>可读</td>
        <td>可写</td>
        <td>可执行</td>
        <td>创建时间</td>
        <td>修改时间</td>
        <td>访问时间</td>
        <td>操作</td>
    </tr>
    <?php 
        if($info['file']){
            $i = 1;
            foreach($info['file'] as $val){
                $p = $path.'/'.$val;
    ?>
    <tr align="center">
        <td><?php echo $i;?></td>
        <td><?php echo $val;?></td>
        <td><?php $src = filetype($p) == 'file'?'file_ico.png':'folder_ico.png';?><img src="images/<?php echo $src;?>" alt="" title='文件'></td>
        <td><?php echo transByte(filesize($p));?></td>
        <td><?php $src = is_readable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可读'></td>
        <td><?php $src = is_writeable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可写'></td>
        <td><?php $src = is_executable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可写'></td>
        <td><?php echo date('Y-m-d H:i:s',filectime($p));?></td>
        <td><?php echo date('Y-m-d H:i:s',filemtime($p));?></td>
        <td><?php echo date('Y-m-d H:i:s',fileatime($p));?></td>
        <td>
            <?php 
                //得到文件扩展名
                $ext = strtolower(end(explode('.',$val)));
                $imageExt = array('gif','jpg','png','jpeg');
                if(in_array($ext, $imageExt)){ ?>
                <a href="javascript:void(0)" onclick='showDetail("<?php echo $val;?>","<?php echo $p;?>")' title='查看'><img src="images/show.png" width="32" alt=""></a>
                
            <?php    }else{ ?>
                <a href="index.php?act=showContent&filename=<?php echo $p;?>" title='查看'><img src="images/show.png" width="32" alt=""></a>
            <?php
                }
            ?>
            
            <a href="index.php?act=editContent&filename=<?php echo $p;?>" title='修改'><img src="images/edit.png" width="32" alt=""></a>
            <a href="index.php?act=renameFile&filename=<?php echo $p;?>" title='重命名'><img src="images/rename.png" width="32" alt=""></a>
            <a href="" title='复制'><img src="images/copy.png" width="32" alt=""></a>
            <a href="" title='剪切'><img src="images/cut.png" width="32" alt=""></a>
            <a href="javascript:void(0)" onclick="delFile('<?php echo $p;?>')" title='删除'><img src="images/delete.png" width="32" alt=""></a>
            <a href="index.php?act=downFile&filename=<?php echo $p;?>" title='下载'><img src="images/download.png" width="32" alt=""></a>
        </td>
    </tr>
    <?php            
                $i++;
            }
        }
    ?>
    <!--读取目录-->
    <?php 
        if($info['dir']){
            foreach($info['dir'] as $val){
                $p = $path.'/'.$val;
    ?>
    <tr align="center">
        <td><?php echo $i;?></td>
        <td><?php echo $val;?></td>
        <td><?php $src = filetype($p) == 'file'?'file_ico.png':'folder_ico.png';?><img src="images/<?php echo $src;?>" alt="" title='文件'></td>
        <td><?php $size = 0; echo transByte(dirSize($p));?></td>
        <td><?php $src = is_readable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可读'></td>
        <td><?php $src = is_writeable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可写'></td>
        <td><?php $src = is_executable($p)?'correct.png':'error.png';?><img src="images/<?php echo $src;?>" width="32" alt="" title='可写'></td>
        <td><?php echo date('Y-m-d H:i:s',filectime($p));?></td>
        <td><?php echo date('Y-m-d H:i:s',filemtime($p));?></td>
        <td><?php echo date('Y-m-d H:i:s',fileatime($p));?></td>
        <td>
            <a href="javascript:void(0)" onclick='showDetail("<?php echo $val;?>","<?php echo $p;?>")' title='查看'><img src="images/show.png" width="32" alt=""></a>
            <a href="index.php?act=editContent&filename=<?php echo $p;?>" title='修改'><img src="images/edit.png" width="32" alt=""></a>
            <a href="index.php?act=renameFile&filename=<?php echo $p;?>" title='重命名'><img src="images/rename.png" width="32" alt=""></a>
            <a href="" title='复制'><img src="images/copy.png" width="32" alt=""></a>
            <a href="" title='剪切'><img src="images/cut.png" width="32" alt=""></a>
            <a href="javascript:void(0)" onclick="delFile('<?php echo $p;?>')" title='删除'><img src="images/delete.png" width="32" alt=""></a>
            <a href="index.php?act=downFile&filename=<?php echo $p;?>" title='下载'><img src="images/download.png" width="32" alt=""></a>
        </td>
    </tr>
    <?php            
                $i++;
            }
        }
    ?>    
</table>
</form>
<script src='common.js'></script>
</body>
</html>
View Code

dir.func.php:

<?php
//遍历目录函数,只读取最外层
function readDirectory($path){
    $handle = opendir($path);
    while(($item = readdir($handle)) !== false){
        //.当前目录和..上级目录
        if($item != '.' && $item != '..'){
            if(is_file($path.'/'.$item)){    //文件
                $arr['file'][] = $item;    //把文件保存至二维数组
            }
            if(is_dir($path.'/'.$item)){    //目录
                $arr['dir'][] = $item; //把目录保存至二维数组
            }
        }
    }
    closedir($handle);
    return $arr;
}

//得到文件夹大小
function dirSize($path){
    $handle = opendir($path);
    $size = 0;
    //static $size;
    global $size;
    while(($item = readdir($handle)) !== false){
        if($item != '.' && $item != '..'){
            if(is_file($path.'/'.$item)){
                $size += filesize($path.'/'.$item);
            }else if(is_dir($path.'/'.$item)){
                dirSize($path.'/'.$item);
                //递归的另一种写法
                //$func = __FUNCTION__;
                //$func($path.'/'.$item);
            }
        }
    }
    closedir($handle);
    return $size;
}
View Code
原文地址:https://www.cnblogs.com/dee0912/p/4392226.html