php文件分享代码,可设置分享链接有效期并隐藏真实下载地址
这是一个简单的PHP文件分享程序,以下是程序的基本功能:
首页需要登录才能显示
阿里云限量代金券 | 此广告位出租25元/月 显示指定目录下的所有文件
给每个文件生成分享按钮
点击分享按钮会自动复制分享链接
分享链接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 . '×tamp=' . $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下测试运行正常无报错