大家好,我是轻云。我最近无聊,于是临时撸了一个临时网盘程序[手动滑稽]。不过,今天我不是来给你们送代码的,我是来一步步教你并且给你代码的
演示地址:http://weblog.52msr.cn/pan/
特别鸣谢:孟坤博客,他为我提供了无数据库配置类
末尾有开源哦!

请注意:变量$C的操作都是配置类!

话不多说,上index.html的代码

<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<meta charset="utf-8">
<title>轻云临时网盘</title>
</head>
<body>
<nav class="navbar navbar-default navbar-static-top">
  <div class="container">
    <a class="navbar-brand" href="#">轻云临时网盘</a>
    <ul class="nav navbar-nav">
        <li class="active"><a href="#">上传<span class="sr-only">(current)</span></a></li>
        <li><a href="./getfile.php">提取</a></li>
        <li><a href="./delete.php">删除</a></li>
    </ul>
  </div>
</nav>
<div class='container'>
<div class="panel panel-default">
  <div class="panel-heading">上传文件</div>
  <div class="panel-body">
    <form action="upload_file.php" method="post" enctype="multipart/form-data">
    <div class="alert alert-info" role="alert"><p>注意:我们的网盘可以上传200MB以内的文件,基本上常用的类型都支持</p></div>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="立即上传" class="btn btn-success">
    </form>
<hr>
<p align='center'>请注意:本系统处于Beta5.0期,我们的系统会自动清理文件。您上传完成文件的一天后,文件和提取码就会失效。所以请尽快提取。本项目的完全官方开源地址:<a href='https://lightcloud.lanzous.com/icyicsj '>https://lightcloud.lanzous.com/icyicsj</a></p>
  </div>
</div>
<p align='center'>Powered By LightCloud</p>
</div>
</body>
</html> 

咱们来一行一行剖析。首先我不讲那些没有用的,直接看到

<form action="upload_file.php" method="post" enctype="multipart/form-data">
    <div class="alert alert-info" role="alert"><p>注意:我们的网盘可以上传200MB以内的文件,基本上常用的类型都支持</p></div>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="立即上传" class="btn btn-success">
</form>

这个代码可以看出是form表单提交,提交到upload_file.php文件。所以核心就是upload_file.php。
接下来看看这个核心文件

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<title>上传文件结果</title>
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4: */
// +----------------------------------------------------------------------+
// | PHP version 5                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 3.0 of the PHP license,       |
// | that is bundled with this package in the file LICENSE, and is        |
// | available through the world-wide-web at the following url:           |
// | http://www.php.net/license/3_0.txt.                                  |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Authors: Original Author <qingyungongzuoshi@tom.com>                        |
// |          Your Name <qingyungongzuoshi@tom.com>                                 |
// +----------------------------------------------------------------------+
//
// $Id:$
// 允许上传的文件后缀
$allowedExts = array(
    "gif",
    "jpeg",
    "jpg",
    "png",
    "zip",
    "rar",
    "7z",
    "doc",
    "docx",
    "xls",
    "xlsx",
    "ppt",
    "pptx",
);
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
/* 文件判断核心开始
 * 这里提供两种方案,最好的就是目前的黑名单方式
 * 如果想要设置为白名单,那就去掉==前的感叹号!,就会变成白名单形式
 * 去掉了感叹号以后再把==后面引号里面的改为你自己要的后缀
 */
if ((($extension  !== "php") || ($extension  !== "ini") || ($extension  !== "html") || ($extension  !== "asp") || ($extension  !== "jsp") || ($extension  !== "exe") || ($extension  !== "htm") || ($extension  !== "js") || ($extension  !== "css")) && ($_FILES["file"]["size"] < 204800000) // 小于 200 mb
 && in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "<div class='alert alert-danger' role='alert'>系统错误,请重试!</div><br>"; //当上传出错提醒错误
    } else {
        //随机产生六位数密码Begin
        //第一种解决方案,当您的用户很多的时候就选用这种混合6位数方法
        function randStr($len = 6, $format = 'ALL') {
            switch ($format) {
                case 'ALL':
                    $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
                    break;

                case 'CHAR':
                    $chars = 'abcdefghijklmnopqrstuvwxyz';
                    break;

                case 'NUMBER':
                    $chars = '0123456789';
                    break;

                default:
                    $chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
                    break;
            }
            mt_srand((double)microtime() * 1000000 * getmypid());
            $password = "";
            while (strlen($password) < $len) $password.= substr($chars, (mt_rand() % strlen($chars)) , 1);
            return $password;
        }
        //随机产生六位数密码End
        $lsm = randStr(6); //这个其实是一开始写废的代码,留着就好,别删。
        // $lsm这个变量的第二种解决方案:rand(1000,9999); 这样写生成四位随机数
        $link = $website . "upload/" . $filenames;
        $filenames = md5("xlsx88skzkl" . $_FILES["file"]["name"] . "getgetspakejxn" . rand(0000, 9999)) . "." . $extension; /* md5加密更改后的文件名,保证文件安全 */
        /* echo "上传文件名: " . $filenames . "<br>";
        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; 
        /* echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>"; */
        // 判断当前目录下的 upload 目录是否存在该文件
        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (file_exists("upload/" . $_FILES["file"]["name"])) {
            echo "<br><div class='container'><div class='panel panel-default'><div class='panel-heading'>提示</div><div class='panel-body'><div class='alert alert-danger'>系统已经存在重名文件,请尝试修改文件名</div> <ul class='list-group'><li class='list-group-item'><a href='./index.html'>返回主页</a></li></ul></div></div></div>"; //当存在重名文件,就报错。
        } else {
            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            /* echo "文件下载直链: " . $website . "upload/" . $_FILES["file"]["name"]; */
            require_once 'Config.class.php'; //引入孟坤的配置读取类
            $tqm = randStr(6); //定义提取码为6位混合(第一种方案),第二种方案: rand(1000,9999); 即为生成四位随机数
            $link = $filenames; //这里的变量名本来是下载链接,但是后来考虑到了有删除功能,就直接等于了变量filenames(文件名)
            $overtime = date('y-m-d h:i:s',time()+24*60*60);
            $tqname = $tqm . "overtime";
            $C = new Config('dataconfig'); //初始化配置类
            $C->set("$tqm", "$link")->save(); //写入数据文件dataconfig.php,分别是提取码和下载文件名
            $C->set("$tqname", "$overtime")->save(); //写入数据文件dataconfig.php,分别是提取码标识和过期时间
            echo "<br><div class='container'><div class='panel panel-default'><div class='panel-heading'>提示</div><div class='panel-body'><div class='alert alert-success'>上传成功!您的提取码是:" . $tqm . "</div> <ul class='list-group'><li class='list-group-item'><a onclick='tell();'>复制提取码</a></li><li class='list-group-item'><a href='./index.html'>返回主页 /</a><a href='./getfile.php'> 前往提取</a></li></ul></div></div></div>"; //输出成功。
            rename("upload/" . $_FILES["file"]["name"], "upload/" . $filenames); //重命名文件名,加密文件名
        }
    }
} else {
    echo "<br><div class='container'><div class='panel panel-default'><div class='panel-heading'>提示</div><div class='panel-body'><div class='alert alert-danger'>请检查文件后缀和大小是否符合我们的规定,并重新上传</div> <ul class='list-group'><li class='list-group-item'><a href='./index.html'>返回主页</a></li></ul></div></div></div>"; /* 当所有条件不满足,就报错。 */
}
?>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="./other/layer/layer.js"></script>
<script>
function tell(){
    layer.open({
        title: '手动复制提取码'
        ,content: '打开<? echo $website; ?>getfile.php,输入提取码 <? echo $tqm; ?> 获取我分享的文件。对了,这个文件过了<? echo $overtime; ?>就过期而无法查看了哦!'
        ,icon:1
    });     
}
</script>

这个文件就是核心了。里面有详细注释,我就不多说了。(就问你,乱不乱
算了不说多了,因为代码一多服务器就400。。所以,我把开源的地址给你。

开源:https://lightcloud.lanzous.com/icyicsj

Last modification:June 3rd, 2020 at 02:37 pm
如果这篇文章帮到了你,就打赏一下吧(只支持QQ)