php实现文件共享
PHP实现文件共享的方法
使用PHP原生函数实现文件上传和下载
创建一个简单的文件上传表单,通过PHP的move_uploaded_file函数将文件保存到服务器指定目录。下载功能可以通过设置HTTP头实现。
// 上传处理
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$targetDir = "uploads/";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile);
}
// 下载处理
if (isset($_GET['file'])) {
$filepath = 'uploads/' . $_GET['file'];
if (file_exists($filepath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filepath).'"');
readfile($filepath);
exit;
}
}
创建文件列表展示页面
使用scandir函数获取目录中的文件列表,并为每个文件生成下载链接。
$files = scandir('uploads');
foreach ($files as $file) {
if ($file !== '.' && $file !== '..') {
echo '<a href="download.php?file='.$file.'">'.$file.'</a><br>';
}
}
添加访问控制
通过会话管理实现基本的访问控制,确保只有登录用户才能上传或下载文件。
session_start();
if (!isset($_SESSION['user'])) {
header('Location: login.php');
exit;
}
设置文件大小限制
在php.ini中修改upload_max_filesize和post_max_size参数,或在代码中检查文件大小。
if ($_FILES["fileToUpload"]["size"] > 5000000) {
echo "文件太大,最大允许5MB";
}
实现文件分享链接
为每个文件生成唯一标识符,创建可分享的短链接。
$shareCode = uniqid();
file_put_contents('share_codes/'.$shareCode.'.txt', $filepath);
添加文件预览功能
对于图片、PDF等可预览文件类型,提供在线预览选项。
if (in_array($ext, ['jpg', 'png', 'gif'])) {
echo '<img src="uploads/'.$file.'" style="max-width:300px">';
}
安全注意事项
- 验证文件类型,防止上传恶意文件
- 重命名上传文件,避免文件名冲突和路径遍历攻击
- 设置适当的目录权限
- 定期清理旧文件
- 考虑使用CSRF保护
扩展功能建议
- 添加文件分类和搜索功能
- 实现多文件同时上传
- 集成云存储服务
- 添加文件版本控制
- 实现协作编辑功能







