当前位置:首页 > 其他 > 正文内容

php文件分享代码,可设置分享链接有效期并隐藏真实下载地址

23vps2年前 (2023-06-04)其他524

这是一个简单的PHP文件分享程序,以下是程序的基本功能:

  1. 首页需要登录才能显示

    阿里云限量代金券 | 此广告位出租25元/月
  2. 显示指定目录下的所有文件

  3. 给每个文件生成分享按钮

  4. 点击分享按钮会自动复制分享链接

  5. 分享链接1小时后失效,无法从分享链接中找到真实下载源

请注意,这个程序只是一个简单的示例,您需要根据具体需求进行修改和优化,并加强安全措施。

以下是程序的代码:

index.php:

<?php
session_start();

// 检查是否登录
if (!isset($_SESSION['username'])) {
    header('Location: login.php');
    exit;
}

// 指定分享目录
$share_dir = './share/';

// 获取分享目录下的所有文件
$files = scandir($share_dir);

// 过滤掉 . 和 .. 文件
$files = array_filter($files, function($file) {
    return $file != '.' && $file != '..';
});

// 生成分享链接
function generate_share_link($filename) {
    $timestamp = time() + 3600; // 1小时后失效
    $hash = md5($filename . $timestamp);
    return 'http://example.com/download.php?file=' . urlencode($filename) . '&hash=' . $hash . '&timestamp=' . $timestamp;
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>文件分享</title>
</head>
<body>
    <h1>文件分享</h1>

    <p>欢迎 <?php echo $_SESSION['username']; ?>,以下是您可以分享的文件:</p>

    <ul>
        <?php foreach ($files as $file): ?>
            <li>
                <?php echo $file; ?> 
                <button onclick="copyToClipboard('<?php echo generate_share_link($file); ?>')">分享</button>
            </li>
        <?php endforeach; ?>
    </ul>

    <script>
        // 复制分享链接到剪贴板
        function copyToClipboard(text) {
            var input = document.createElement('input');
            input.setAttribute('value', text);
            document.body.appendChild(input);
            input.select();
            document.execCommand('copy');
            document.body.removeChild(input);
            alert('分享链接已复制到剪贴板');
        }
    </script>
</body>
</html>

download.php:

<?php
// 检查链接是否过期
if ($_GET['timestamp'] < time()) {
    die('链接已过期');
}

// 检查链接是否被篡改
$hash = md5($_GET['file'] . $_GET['timestamp']);
if ($_GET['hash'] != $hash) {
    die('链接无效');
}

// 下载文件
$filename = './share/' . $_GET['file'];
if (file_exists($filename)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($filename));
    readfile($filename);
    exit;
} else {
    die('文件不存在');
}
?>

login.php:

<!DOCTYPE html>
<html>
<head>
    <title>登录</title>
</head>
<body>
    <h1>登录</h1>

    <form action="login.php" method="post">
        <label for="username">用户名:</label>
        <input type="text" name="username" id="username" required>

        <label for="password">密码:</label>
        <input type="password" name="password" id="password" required>

        <button type="submit">登录</button>
    </form>

    <?php
    // 处理登录请求
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        // 检查用户名和密码是否正确
        if ($_POST['username'] == 'admin' && $_POST['password'] == 'password') {
            // 登录成功,保存用户名到session中
            session_start();
            $_SESSION['username'] = $_POST['username'];

            // 跳转到首页
            header('Location: index.php');
            exit;
        } else {
            // 登录失败,显示错误信息
            echo '<p>用户名或密码错误</p>';
        }
    }
    ?>
</body>
</html>

请将上述代码保存为三个单独的文件,并将其中的example.com替换为您的网站域名。


本程序在php7.2下测试运行正常无报错

本网站由提供服务

扫描二维码推送至手机访问。

版权声明:本文由主机测评网发布,如需转载请注明出处。

本文链接:https://23vps.com/post/70.html

标签: 建站
分享给朋友:

“php文件分享代码,可设置分享链接有效期并隐藏真实下载地址” 的相关文章

curl和wget忽略证书错误教程

curl和wget是我们常用的Linux下载测试工具如果遇到下载报错可以按下面方法操作如果是curl ssl证书错误其实只要在url地址后面加上 -k,就可以忽略证书校验了(不验证证书)。具体就是这样操作:curl  'https://下载地址' -k如...

syncthing文件同步软件

syncthing文件同步软件

这是一款可以满足办公、文件共享、团队协作、家庭存储等文件同步需求的开源软件,不依赖中心服务器,完全由自己掌握数据,安全可靠。Syncthing是免费且开源的,而且跨平台支持windows、mac、linux、android等主流平台,除了PC、手机以外,在部分路由器、树莓派等硬件上都能轻松运行,听说...

解决宝塔环境装不上的问题

解决宝塔环境装不上的问题

主机哥最近安装宝塔面板总是出现各种报错,不是装面板时报错就是lnmp环境报错,折腾了好几天终于整出一套教程,100%解决宝塔环境装不上问题。首先确保你的网络连接稳定,特别时wifi网络下安装宝lnmp塔环境时会长时间卡住不动最后出现各种问题,最好用电脑有线网络连接,确保安装过程全程网络稳定,主机哥就...

parsec串流远程桌面神器,用远程桌面可以玩游戏

parsec串流远程桌面神器,用远程桌面可以玩游戏

主机哥最近发现一款不错的国外远程桌面工具,可以内网穿透直连,甚至可以流畅玩游戏看视频不卡顿,都说很厉害,自己台式机电脑上装了一下,但是用我自己笔记本电脑连接台式机时提示-15000错误:点击Read More弹出链接:https://support.parsec.app/hc/en-us/artic...

Nginx打开目录浏览功能(autoindex)

主机要分享一些文件给朋友下载,但是文件数量又比较多,而且需要分很多个文件夹进行分类以便根据需要下载不必整个打包在一起下载,下面介绍利用nginx自带的autoindex配置来实现下载服务器的文件遍历来列出整个目录供朋友浏览下载。宝塔站点修改nginx配置文件,在server段添加下面代码 ...

windows命令行杀死进程(任务)

主机哥遇到进程卡死在后台,任务管理器列表太长,查找麻烦怎么办?tasklist命令查看进程信息,tasklist命令的筛选器功能非常强大先使用tasklist命令查看当前系统中的进程列表,然后针对你要杀的进程使用taskkill命令tasklist  #可以运行tasklist&...