[PHP文件管理器]①④--复制文件夹

Paste_Image.png
Paste_Image.png

修改代码

function copyFolder($src,$dst){
    //echo $src,"---",$dst."----";//file/abc---file/c/abc----
    if(!file_exists($dst)){
        mkdir($dst,0777,true);
    }
    $handle=opendir($src);
    while (($item=readdir($handle))!==false){
        if($item!="."&&$item!=".."){
            if(is_file($src."/".$item)){
                copy($src."/".$item, $dst."/".$item);
            }
            if(is_dir($src."/".$item)){
                $func=__FUNCTION__;
                $func($src."/".$item,$dst."/".$item);//递归
            }
        }
    }
    closedir($handle);
    return "复制成功";
}

<a href="index.php?act=copyFolder&path=<?php echo $path;?>&dirname=<?php echo $p;?>">
![](images/copy.png)</a>
else if($act=="copyFolder"){
    $str=<<<EOF
    <form action="index.php?act=doCopyFolder" method="post">
    将文件夹复制到:<input type="text" name="dstname" placeholder="将文件夹复制到"/>
            <input type="hidden" name="path" value="{$path}"/>
            <input type='hidden' name="dirname" value='{$dirname}'/>
            <input type='submit' value="复制文件夹"/>
    </form>
EOF;
    echo $str;
}else if($act=='doCopyFolder'){
    $dstname=$_REQUEST['dstname'];
    
    $mes=copyFolder($dirname,$path."/".$dstname."/".basename($dirname));
    
    alertMes($mes, $redirect);
}

dir.func.php

<?php
/**
 * 遍历目录函数 最外层
 * @param string $path
 * @return array
 */
function readDirectory($path) {
    $handle = opendir ( $path );
    $arr = array ();
    // !== 防止文件名为0 被忽略
    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;
}

// $path = "file";
// print_r ( readDirectory ( $path ) );

/**
 * 得到文件夹大小
 * 
 * @param unknown $path         
 * @return Ambigous <unknown, number>
 */
function dirSize($path) {
    $sum = 0;
    global $sum;
    $handle = opendir ( $path );
    while ( ($item = readdir ( $handle )) !== false ) {
        if ($item != "." && $item != "..") {
            if (is_file ( $path . "/" . $item )) {
                $sum += filesize ( $path . "/" . $item );
            }
            if (is_dir ( $path . "/" . $item )) {
                $func = __FUNCTION__;
                $func ( $path . "/" . $item ); // 递归
            }
        }
    }
    closedir ( $handle );
    return $sum;
}
function copyFolder($src, $dst) {
    // echo $src,"---",$dst."----";//file/abc---file/c/abc----
    if (! file_exists ( $dst )) {
        mkdir ( $dst, 0777, true );
    }
    $handle = opendir ( $src );
    while ( ($item = readdir ( $handle )) !== false ) {
        if ($item != "." && $item != "..") {
            if (is_file ( $src . "/" . $item )) {
                copy ( $src . "/" . $item, $dst . "/" . $item );
            }
            if (is_dir ( $src . "/" . $item )) {
                $func = __FUNCTION__;
                $func ( $src . "/" . $item, $dst . "/" . $item ); // 递归
            }
        }
    }
    closedir ( $handle );
    return "复制成功";
}

?>

index.php

<?php
require_once ('dir.func.php');
require_once 'file.func.php';
require_once 'common.func.php';

$path = 'file';
$path = isset ( $_REQUEST ['path'] ) ? $_REQUEST ['path'] : $path;
$arr = readDirectory ( $path );
$act = isset ( $_REQUEST ['act'] ) ? $_REQUEST ['act'] : '';
$filename = isset ( $_REQUEST ['filename'] ) ? $_REQUEST ['filename'] : '?';
$redirect = "index.php?path={$path}";
$dirname = isset ( $_REQUEST ['dirname'] ) ? $_REQUEST ['dirname'] : '';
// echo $act."<br/>";
// echo $filename;

if (! (isset ( $arr ['file'] )) && ! (isset ( $arr ['dir'] ))) {
    echo "<script>alert('没有文件或目录!');location.href='index.php';</script>";
}

if ($act == '创建文件') {
    $mes = createFile ( $path . "/" . $filename );
    alertMes ( $mes, $redirect );
} else if ($act == 'showContent') {
    // 查看文件内容
    $content = file_get_contents ( $filename );
    if (strlen ( $content )) {
        // textarea能完整显示代码
        // echo "<textarea col='1000' rows='10'>$content</textarea>";
        
        // 高亮显示字符创中的PHP代码 true不自动输出(echo)
        $newContent = highlight_string ( $content, true );
        // 高亮显示文件中的PHP代码
        // $content=highlight_file($filename,true);
        
        $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' col='190' rows='10'>{$content}</textarea>
        <input type='hidden' name='filename' value='{$filename}'/>
        <input type="submit" value="修改文件内容"/>
    </form>
EOF;
    echo $str;
} else if ($act == "doEdit") {
    // 修改文件内容的操作
    $content = $_REQUEST ['content'];
    // echo $content;
    if (file_put_contents ( $filename, $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 = $_REQUEST ['newname'];
    $mes = renameFile ( $filename, $newname );
    alertMes ( $mes, $redirect );
} else if ($act == 'delFile') {
    $mes = deleteFile ( $filename );
    alertMes ( $mes, $redirect );
} else if ($act == 'downFile') {
    // 完成下载的操作
    $mes = downFile ( $filename );
} else if ($act == "copyFolder") {
    $str = <<<EOF
    <form action="index.php?act=doCopyFolder" method="post">
    将文件夹复制到:<input type="text" name="dstname" placeholder="将文件夹复制到"/>
            <input type="hidden" name="path" value="{$path}"/>
            <input type='hidden' name="dirname" value='{$dirname}'/>
            <input type='submit' value="复制文件夹"/>
    </form>
EOF;
    echo $str;
} else if ($act == 'doCopyFolder') {
    $dstname = $_REQUEST ['dstname'];
    
    $mes = copyFolder ( $dirname, $path . "/" . $dstname . "/" . basename ( $dirname ) );
    
    alertMes ( $mes, $redirect );
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Insert title here</title>
<link rel="stylesheet" href="cikonss.css" />
<script src="jquery-ui/js/jquery-1.10.2.js"></script>
<script src="jquery-ui/js/jquery-ui-1.10.4.custom.js"></script>
<script src="jquery-ui/js/jquery-ui-1.10.4.custom.min.js"></script>
<link rel="stylesheet"
    href="jquery-ui/css/ui-lightness/jquery-ui-1.10.4.custom.css"
    type="text/css" />
<style type="text/css">
body,p,div,ul,ol,table,dl,dd,dt {
    margin: 0;
    padding: 0;
}

a {
    text-decoration: none;
}

ul,li {
    list-style: none;
    float: left;
}

#top {
    width: 100%;
    height: 48px;
    margin: 0 auto;
    background: #E2E2E2;
}

#navi a {
    display: block;
    width: 48px;
    height: 48px;
}

#main {
    margin: 0 auto;
    border: 2px solid #ABCDEF;
}

.small {
    width: 25px;
    height: 25px;
    border: 0;
}
</style>
<script type="text/javascript">
    function show(dis){
    document.getElementById(dis).style.display="block";
    }
    function delFile(filename){
        if(window.confirm("您确定要删除嘛?删除之后无法恢复哟!!!")){
                location.href="index.php?act=delFile&filename="+filename;
        }
        return false;
    }

    function showDetail(t,filename){
        $("#showImg").attr("src",filename);
        $("#showDetail").dialog({
              height:"auto",
              width: "auto",
              position: {my: "center", at: "center",  collision:"fit"},
              modal:false,//是否模式对话框
              draggable:true,//是否允许拖拽
              resizable:true,//是否允许拖动
              title:t,//对话框标题
              show:"slide",
              hide:"explode"
        });
        }
    
    function goBack($back){
        location.href="index.php?path="+$back;
    }
</script>
</head>

<body>
    <div id="showDetail" style="display: none">
        <img src="" id="showImg" alt="" />
    </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="#" onclick="show('createFolder')" 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="#" onclick="show('uploadFile')" 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>
            <?php
            $back = ($path == 'file') ? "file" : dirname ( $path );
            ?>
            <li><a href="#" title="返回上级目录"
                onclick="goBack('<?php echo $back;?>')"><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="submit"
                    name="act" 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>
                <td>编号</td>
                <td>名称</td>
                <td>类型</td>
                <td>大小</td>
                <td>可读</td>
                <td>可写</td>
                <td>可执行</td>
                <td>创建时间</td>
                <td>修改时间</td>
                <td>访问时间</td>
                <td>操作</td>
            </tr>
        <?php
        $i = 1;
        if (isset ( $arr ) && isset ( $arr ['file'] )) {
            if ($arr ['file']) {
                
                foreach ( $arr ['file'] as $val ) {
                    $p = $path . "/" . $val;
                    ?>
            <tr>
                <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?>" alt="" class="small" /></td>
                <td><?php $src=is_writeable($p)?"correct.png":"error.png"?>
            <img src="images/<?php echo $src?>" alt="" class="small" /></td>
                <td><img
                    src="images/<?php echo (is_executable($p)? "correct.png":"error.png");?>"
                    alt="" class="small" /></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>
            <?php
                    // 得到文件扩展名
                    // explode 将字符串打散为数组
                    // end() 函数将内部指针指向数组中的最后一个元素,并输出
                    $ext = strtolower ( end ( explode ( ".", $val ) ) );
                    $imageExt = array (
                            "gif",
                            "jpeg",
                            "jpg",
                            "png" 
                    );
                    // in_array() 函数搜索数组中是否存在指定的值。
                    if (in_array ( $ext, $imageExt )) {
                        ?>
                <td><a href="#"
                    onclick="showDetail('<?php echo $val;?>','<?php echo $p;?>')"><img
                        class="small" src="images/show.png" alt="" title="查看" /></a>|
                <?php
                    } else {
                        ?>
            
                <td><a href="index.php?act=showContent&filename=<?php echo $p?>"><img
                            class="small" src="images/show.png" alt="" title="查看" /></a>|
                <?php
                    }
                    ?>
    
                <a href="index.php?act=editContent&filename=<?php echo $p?>"><img
                            class="small" src="images/edit.png" alt="" title="修改" /></a>| <a
                        href="index.php?act=renameFile&filename=<?php echo $p;?>"><img
                            class="small" src="images/rename.png" alt="" title="重命名" /></a>|
                        <a href=""><img class="small" src="images/copy.png" alt=""
                            title="复制" /></a>| <a href=""><img class="small"
                            src="images/cut.png" alt="" title="剪切" /></a>| <a href=""
                        onclick="return delFile('<?php echo $p;?>')"><img class="small"
                            src="images/delete.png" alt="" title="删除" /></a>| <a
                        href="index.php?act=downFile&filename=<?php echo $p?>"><img
                            class="small" src="images/download.png" alt="" title="下载" /></a></td>
            
            </tr>
            
            
        <?php
                    $i ++;
                }
            } else {
                // echo "<script type='text/javascript'>alert('没有文件!');</script>";
            }
        }
        ?>
        
        <!-- 读取目录的操作 -->
        <?php
        if (isset ( $arr ['dir'] )) {
            if ($arr ['dir']) {
                foreach ( $arr ['dir'] as $val ) {
                    $p = $path . "/" . $val;
                    ?>
            <tr>
                <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 $sum=0;echo transByte(dirSize($p));?></td>
                <td><?php $src=is_readable($p)?"correct.png":"error.png"?>
            <img src="images/<?php echo $src?>" alt="" class="small" /></td>
                <td><?php $src=is_writeable($p)?"correct.png":"error.png"?>
            <img src="images/<?php echo $src?>" alt="" class="small" /></td>
                <td><img
                    src="images/<?php echo (is_executable($p)? "correct.png":"error.png");?>"
                    alt="" class="small" /></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="index.php?path=<?php echo $p;?>"><img class="small"
                        src="images/show.png" alt="" title="查看" /></a>| <a
                    href="index.php?act=renameFile&filename=<?php echo $p;?>"><img
                        class="small" src="images/rename.png" alt="" title="重命名" /></a>| <a
                    href="index.php?act=copyFolder&path=<?php echo $path;?>&dirname=<?php echo $p;?>">
                        ![](images/copy.png)
                </a>| <a href=""><img class="small" src="images/cut.png" alt=""
                        title="剪切" /></a>| <a href=""
                    onclick="return delFile('<?php echo $p;?>')"><img class="small"
                        src="images/delete.png" alt="" title="删除" /></a>| <a
                    href="index.php?act=downFile&filename=<?php echo $p?>"><img
                        class="small" src="images/download.png" alt="" title="下载" /></a></td>

            </tr>
            
            
        <?php
                    $i ++;
                }
            } else {
                // echo "<script type='text/javascript'>alert('没有目录!');</script>";
            }
        }
        
        ?>
    </table>
    </form>
</body>
</html>
Paste_Image.png
Paste_Image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容