以下是一个简单的PHP脚本示例,它展示了如何创建一个基本的文件下载服务器。
注:采用nginx+php-fpm
搭建方式见另外一篇文章:https://silenceweb.cn/archives/zai-centos-7.9zhong-an-zhuang-nginx-php-php-fpmhuan-jing
步骤1:准备文件存储目录
首先,在你的服务器上创建一个目录来存储可供下载的文件。例如,你可以创建一个名为 files
的目录。
mkdir -p /tmp/testFilePath/
确保该目录对Web服务器用户(如 www-data
)是可写的,或者你可以将文件上传到一个Web服务器用户有权限的目录。
步骤2:创建PHP脚本
创建一个PHP脚本来处理文件下载请求。例如,创建一个名为 download.php
的文件。
文件存储在/usr/share/nginx/downfile/路径下
<?php
if (isset($_GET['file'])) {
$file = $_GET['file'];
$filePath = "/usr/share/nginx/downfile/" . basename($file);
if (file_exists($filePath)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filePath));
flush(); // Flush system output buffer
readfile($filePath);
exit;
} else {
echo "File not found...";
echo $filePath;
}
} else {
echo "No file specified.";
}
?>
步骤3:测试文件下载
启动你的Web服务器,并通过浏览器访问下载链接,例如:
http://your-server-address/download.php?file=example.pdf
确保替换 your-server-address
和 example.pdf
为你的实际服务器地址和文件名。
安全注意事项
- 验证文件名:确保对用户输入的文件名进行严格的验证,防止路径遍历攻击。
- 权限管理:根据需要添加用户认证和权限管理。
- 日志记录:记录文件下载活动,以便审计和监控。
- 限制访问:考虑使用IP白名单或其他机制来限制对下载服务器的访问。
这只是一个简单的示例,实际生产环境中你可能需要更复杂的逻辑和安全措施。