php本地文件管理系统

2019-05-15  本文已影响0人  好像在哪见过你丶

软件开发流程【了解】

网站开发制作流程:任何一个系统的开发都是一件非常复杂的事情,涉及的工作也都是方方面面的。一个大型的软件产品的开发,通常需要一个甚至多个团队合作。一个软件产品从开发到最终验收上线,通常有以下几个步骤:

1.需求分析

2.概要设计

3.详细设计

4.编码

5.测试

6.软件交付

7.验收

8.维护

总结:软件开发的标准流程是非常复杂的,因为一个号的软件产品从需求到产品上线,这个中间涉及的环节是非常多的,需求也是不断的变化,要根据实际的需求进行很多调整。而且在整个开发过程中,涉及的产物也非常多,有需求文档、需求确认文档、概要设计文档、详细设计文档、原型图、ER图、开发文档、产品使用文档、运维报告等等。


Web开发基本流程【了解】

定义:Web开发也属于应用软件开发,本质上应该遵循软件产品的开发流程,只是Web应用(网站)作为一种比较简单的软件开发,为了达到快速上线占领市场,会把流程做到简化一些。

1.需求分析:要做什么,能否实现?完成功能确认
2.原型设计:简单效果展示,完成效果确认
3.开发设计:将原型设计的效果使用技术实现

4.软件测试:测试网站各项功能是否能够满足需求

5.网站部署:将系统部署到对应的服务器环境,实现上线服务
6.运维:检测系统运行状况,随时处理出现的异常

总结:其实国内的很多开发,尤其是小公司,并没有开发流程这一套,更多的时候就是给定一个需求,然后讨论一下时间节点,中间开发的时候有个过程报告,最后就实现了产品的交互。但是按照流程开发的话,能够让整个开发过程变得有序进行,而且过程透明,利于监控进度。因此,如果企业没有特别追求产品上线周期的时候,尽量按照开发规范来设计网站。


PHP本地文件管理系统【掌握】

思考:现在有这么一个需求,想有一个网站,能够在网站里去输入对应的路径(HTML是客户端运行,因此不支持直接获取客户端路径),就能够看到对应的路径下的所有文件信息,并且能够实现增删改查操作呢?

引入:这种需求本质上是不能支持客户操作的,因为PHP只能操作本地的文件,没有技术能够去收集客户端电脑的文件信息(太不安全)。因此,这种需求可以考虑是实现一个写好的专门用户本地电脑上文件管理的功能。

前端显示设计

定义:所谓前端显示设计,就是设计一个最终显示的效果界面,这种界面就是静态的,利用HTML、CSS和JavaScript完成

1.功能分析:没有直接获取路径的表单,因此需要一个能够让用户输入数据并且提交的表单

<form action="获取列表的PHP文件" method="GET">
输入目录:<input type="text" name="dir" value=""/>
<input type="submit" name="submit" value="提交"/>
</form>

2.功能分析:需要给用户显示所有的对应目录的文件信息,可以使用表格完成。表格中应该有序号列、文件名列(缩进)、文件类型列和操作列(增删改三项操作)

<table border=1>
    <p sytle="text-align:center">XXX目录文件列表</p>
    <tr>
        <th>序号</th>
        <th>文件名字</th>
        <th>文件类型</th>
        <th>操作</th>
    </tr>
    <tr>
        <td>1</td>
        <td>index.php</td>
        <td>文件</td>
        <td><a href="">删除</a>|<a href="#">重命名</a></td>    
    </tr>
    <tr>
        <td>2</td>
        <td>Web</td>
        <td>文件夹</td>
        <td><a href="#">新增</a>|<a href="#">删除</a>|<a href="#">重命名</a></a></td>    
    </tr>
</table>

3.功能分析:新增文件表单需要用户指定是文件夹还是文件操作:注意文件操作是带路径的,因此需要提供要操作的具体目录

<h1>显示要新增文件的目录</h1>
<form action="新增文件的PHP文件" method="POST">
<input type="hidden" name="dir" value="要新增文件的目录">
<input type="text" name="filename" value=""/>
文件夹<input type="radio" name="type" value="1"/>
文件<input type="radio" name="type" value="2"/>
<input type="submit" name="submit" value="提交"/>
</form>

4.功能分析:重命名文件就是显示文件本身的名字,然后给定对应的新名字:注意修改文件需要提供路径和原来文件的名字

<h1>显示要重命名的文件路径以及名字</h1>
<form action="修改名字的PHP文件" method="POST">
<input type="hidden" name="dir" value="原文件路径"/>
<input type="hidden" name="filename" value="原文件名字"/>
新名字:<input type="text" name="newname" value=""/>
<input type="submit" name="submit" value="提交修改"/>
</form>

总结:虽然本地文件操作在显示的时候已经列出了所能操作的功能,但是实际上因为新增和重命名操作需要涉及到新数据提交,因此需要对应的新的表单文件。


引入:前端界面已经涉及好,那么主要要看后台的实现了。后台的实现可以从需求一步一步去实现即可。因为当前功能比较简单,可以考虑将所有的文件放到一个文件夹下面。

后端PHP功能实现【掌握】

1.显示功能:用户第一次访问的界面应该是输入目标的表单:然后提交给后台,后台PHP文件进行处理

getfile.php代码

<?php

//通过路径获取路径下的所有文件信息

//接收数据:保证安全
$dir = $_GET['dir'] ?? '';

//判断路径有效性:无线返回,进入到index.html
if(!is_dir($dir)){
    //路径无效
    echo '路径无效!';
    //跳转
    header('Refresh:3;url=index.html');         //header不会终止代码执行
    //终止执行
    exit;
}

//调用获取文件的函数获取数据信息
include_once 'dirfile.php';

//使用函数
$files = dirfile($dir,$error);
if(!$files){
    //路径无效
    echo $error;
    //跳转
    header('Refresh:3;url=index.html');         //header不会终止代码执行
    //终止执行
    exit;
}

//包含显示文件信息的模板(HTML)文件
include_once 'list.html';

dirfile.php函数代码

<?php


//一个函数:能够获取指定路径下所有的文件信息,以数组返回
/*
 * @param1 string $dir,有效路径
 * @param2 string &$error,错误信息
 * @param3 int $level = 0,表示当前文件所在层级
 * @return array,所有元素的二维数组,无效路径返回false
 */
function dirfile($dir,&$error,$level = 0){
    //判断路径是否有效
    if(!is_dir($dir)){
        $error = '无效路径';
        return false;
    }

    //定义保存数据的数组:静态变量能够跨函数共享数据
    static $output = array();

    //取数据:取出当前文件夹中的数据
    $files = scandir($dir);
    foreach($files as $file){
        //判定到底是文件夹还是文件
        $tmp_file = $dir . '/' . $file;
        if(is_dir($tmp_file)){
            //存储数据
            $output[] = array(
                'filename' => $file,
                'directory'=> $dir,
                'is_dir'   => true,
                'level'    => $level
                );

            //递归点:排除.和..
            if($file == '.' || $file == '..') continue;

            //递归
            dirfile($tmp_file,$error,$level + 1);

        }else{
            $output[] = array(
                'filename' => $file,
                'directory'=> $dir,
                'is_dir'   => false,
                'level'    => $level
                );

        }
        
    }

    //返回结果
    return $output;
}

list.html代码

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>
    <table border=1>
    <p sytle="text-align:center"><?php echo $dir;?>目录文件列表 | <a href="index.html">回到首页</a></p>
    <tr>
        <th>序号</th>
        <th>文件名字</th>
        <th>文件类型</th>
        <th>操作</th>
    </tr>
<?php $index = 1;?>
<?php foreach($files as $k => $file):?>
    <?php if($file['filename'] == '.' || $file['filename'] == '..') continue;?>
    <tr>
        <td><?php echo $index++;?></td>
        <td><?php echo str_repeat('----',$file['level'] * 2),$file['filename'];?></td>
        <td><?php echo $file['is_dir'] ? '文件夹' : '文件';?></td>
        <td>
            <?php echo $file['is_dir'] ? "<a href="#">新增</a> | ": ''?>
            <a href="#">删除</a> 
            | <a href="#">重命名</a>
        </td>    
    </tr>
<?php endforeach;?>
</table>
</body>
</html>

2.删除功能:删除是在显示的基础上,增加删除链接,然后点击实现删除

delete.php代码

<?php

//删除文件

//接收要删除的数据信息
$dir = $_GET['dir'] ?? '';
$file = $_GET['file'] ?? '';

//判断数据是否有效
if(empty($dir) || empty($file)){
    //路径无效
    echo '路径无效!';
    //跳转
    header('Refresh:3;url=index.html');         //header不会终止代码执行
    //终止执行
    exit;
}

//组织要删除的文件内容
$delete = $dir . '/' . $file;

//判断要删除的内容是否有效
if(!file_exists($delete)){
    echo '当前要删除的文件不存在!';
    //跳转
    header('Refresh:3;url=getfile.php?dir=' . $dir);            //header不会终止代码执行
    //终止执行
    exit;
}

//判断删除
if(is_dir($delete)){
    //目录删除
    $res = @rmdir($delete);
}else{
    //文件删除
    $res = @unlink($delete);
}

//返回结果
if(!$res){
    //删除失败
    echo '文件删除失败!';
    //跳转
    header('Refresh:3;url=getfile.php?dir=' . $dir);            //header不会终止代码执行
    //终止执行
    exit;
}else{
    echo '文件删除成功!';
    //跳转
    header('Refresh:3;url=getfile.php?dir=' . $dir);            //header不会终止代码执行
    //终止执行
    exit;
}

3.新增功能:新增是在显示的基础上,对应的文件夹才有新增功能。新增功能通常分为两个部分:第一个部分是显示新增表单,第二部分是提交新增内容
第一部分:显示新增表单

第二部分:新增提交

4.修改功能:修改也是在显示的基础上,实现文件的重命名。编辑操作通常也分为两个部分:第一个部分显示原来信息,第二个部分是提交修改
第一部分:显示修改表单

第二部分:执行重命名操作

总结:其实所有的功能开发最终的代码实现无外乎就是各种增删改查,只是开发的时候会根据不同业务作出不同的判断逻辑,以保证代码的正确执行以及功能的实现。

上一篇 下一篇

猜你喜欢

热点阅读