网盘文件目录功能

1,编辑html页面

新建netdisk_html.php文件:

设计网盘前端页面,代码如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/2 0002
 * Time: 上午 10:07
 */
?>
<h2>在线网盘</h2>
<!--目录列表-->
<div>
    您的位置:主目录
</div>
<!--文件列表-->
<table border="1" cellpadding="3" cellspacing="0" width="100%">
    <tr bgcolor="skyblue"><th>文件名</th><th>大小</th><th width="30%">上传时间</th><th>操作</th></tr>
    <!--目录列表-->
    
        <tr>
            <td>目录1</td>
            <td>-</td>
            <td>2018-03-02 15:57:56</td>
            <td align="center">
                <a href="">打开</a>
                |<a href="">复制</a>
                |<a href="">删除</a>
            </td>
        </tr>
        <tr>
            <td>目录2</td>
            <td>-</td>
            <td>2018-03-02 15:58:00</td>
            <td align="center">
                <a href="">打开</a>
                |<a href="">复制</a>
                |<a href="">删除</a>
            </td>
        </tr>
         <!--文件列表-->
        <tr>
            <td>1.jpg</td>
            <td>3KB</td>
            <td>2018-03-02 16:06:12</td>
            <td align="center">
                <a href="">下载</a>
                |<a href="">复制</a>
                |<a href="">删除</a>
            </td>
        </tr>
</table>
<form method="post">
    新建文件夹:<input type="text" name="newfolder">
    <input type="submit" value="创建">
</form>
<form method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

2,建立数据库连接

基本展示页面显示了,数据是随便写的,接下来应该是建立与数据库的连接,把数据库里的信息遍历然后展示到前端页面,由于后面用到很多操作查询与连接,所有我们写一个工具类以方便与后的数据库操作,新建public_sql.php文件:

代码如下:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/2 0002
 * Time: 上午 9:42
 */
 //初始化数据库连接
function dbInit(){
    $link=mysql_connect('localhost','root','root');
    if(!$link){
        die('lian连接数据库失败'.mysql_error());
    }
    //设置字符集,选择数据库
    mysql_query('set names utf8');
    mysql_query('use php');
}
//查询数据库显示错误信息
function query($sql){
    if($result=mysql_query($sql)){
        //执行成功
        return $result;
    }else{
        //执行失败,显示错误信息以便于调试程序
        echo 'sql执行失败:<br>';
        echo '错误的sql为:',$sql,'<br>';
        echo '错误的代码为:',mysql_errno(),'<br>';
        echo '错误的信息为:',mysql_error(),'<br>';
        die();
    }
}
//查询所有数据并返回结果集
function fetchAll($sql){
    //执行query()函数
    if($result=query($sql)){
        //执行成功
        //遍历结果集
        $rows=array();
        while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
            $rows[]=$row;
        }
        //释放结果集资源
        mysql_free_result($result);
        return $rows;
    }else{
        //执行失败
        return false;
    }
}
//查询单条数据并返回结果集
function fetchRow($sql){
    //执行query()函数
    if($result=query($sql)){
        //从结果集取得依次数据即可
        $row=mysql_fetch_array($result,MYSQL_ASSOC);
        return $row;
    }else{
        return false;
    }
}

3,遍历数据库数据展示到前端页面    

数据库连接公共类写好了接下来就进行查询数据库进行遍历展示目录文件,同时根据$folder_id
可以相应遍历出对应的不同目录:

新建index.php文件:

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/3/2 0002
 * Time: 上午 9:39
 */
header("Content-Type:text/html;charset=utf-8");
//载入数据库操作文件
require("./public_sql.php");
//初始化连接数据库操作
dbInit();
//获取当前目录的id
$folder_id=isset($_GET['folder'])?intval($_GET['folder']):0;
//网盘文件列表
//请求目录不是根目录时,获取当前访问目录的信息
$path=array();
if($folder_id!=0){
    //根据当前目录ID查询目录列表
    $sql="select folder_name,folder_path from netdisk_folder where folder_id=$folder_id";
    $current_folder=fetchRow($sql);
    $file_ids=$current_folder['folder_path'];
    //根据ID路径查询所有父级目录的信息
    if($file_ids!=""){
        $sql="select folder_id,folder_name from netdisk_folder where folder_id in($file_ids)";
        $path=fetchAll($sql);
        //将当期目录追加到路劲数组的末尾
        $path[]=array(
            'folder_id'=>$folder_id,
            'folder_name'=>$current_folder['folder_name']
        );
    }
}
//获取指定目录下的所有文件夹
$sql="select folder_id,folder_name,folder_time from netdisk_folder where folder_pid=$folder_id";
$folder=fetchAll($sql);
//获取指定目录下的所有文件
$sql="select file_id,file_name,file_save,file_size,file_time from netdisk_file where folder_id=$folder_id ";
$file=fetchAll($sql);
//echo "<pre>";
//print_r($folder);
//echo "</pre>";
//引进html页面
require('netdisk_html.php');

    以上代码得到一个$folder和一个$file,分别代表目录和文件并且都是一个二维数组存好了数据库里的信息

通过require('netdisk_html.php')引进了前端文件,接下来只需要遍历出$folder和$file展示在table表格里即可

在netdisk_html.php的文件列表和目录列表内容里加上遍历数据的代码:

<?php
<!--文件列表-->
<table border="1" cellpadding="3" cellspacing="0" width="60%">
    <tr bgcolor="skyblue"><th>文件名</th><th>大小</th><th>上传时间</th><th>操作</th></tr>
    <!--目录列表-->
    <?php foreach ($folder as $v): ?>
        <tr>
            <td><?php echo $v['folder_name']?></td>
            <td>-</td>
            <td><?php echo $v['folder_time']?></td>
            <td align="center">
                <a href="">打开</a>
                |<a href="">复制</a>
                |<a href="">删除</a>
            </td>
        </tr>
    <?php endforeach;?>
    <!--文件列表-->
    <?php foreach ($file as $v):?>
        <tr>
            <td>
                <?php echo $v['file_name'] ?>
            </td>
            <td><?php echo round($v['file_size']/1024) ?>KB</td>
            <td><?php echo $v['file_time'] ?></td>
            <td align="center"><a href="">下载</a>|
                <a href="">复制</a>|
                <a href="">删除</a></td>
        </tr>
    <?php endforeach;?>
</table>

4,页面展示

如下所示:

微信图片_20180302171629.png


5,打开目录功能

只需要在打开按钮加上以下代码即可

微信图片_20180303083813.png

代码如下:

<?php
<a href="?folder=<?php echo $v['folder_id']?>">打开</a>


继续学习
||
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/3/2 0002 * Time: 上午 10:07 */ ?> <h2>在线网盘</h2> <!--目录列表--> <div> 您的位置:主目录 </div> <!--文件列表--> <table border="1" cellpadding="3" cellspacing="0" width="100%"> <tr bgcolor="skyblue"><th>文件名</th><th>大小</th><th width="30%">上传时间</th><th>操作</th></tr> <!--目录列表--> <tr> <td>目录1</td> <td>-</td> <td>2018-03-02 15:57:56</td> <td align="center"> <a href="">打开</a> |<a href="">复制</a> |<a href="">删除</a> </td> </tr> <tr> <td>目录2</td> <td>-</td> <td>2018-03-02 15:58:00</td> <td align="center"> <a href="">打开</a> |<a href="">复制</a> |<a href="">删除</a> </td> </tr> <!--文件列表--> <tr> <td>1.jpg</td> <td>3KB</td> <td>2018-03-02 16:06:12</td> <td align="center"> <a href="">下载</a> |<a href="">复制</a> |<a href="">删除</a> </td> </tr> </table> <form method="post"> 新建文件夹:<input type="text" name="newfolder"> <input type="submit" value="创建"> </form> <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form>
提交重置代码