一、安装及配置阶段
1. 安装 Apache 和 PHP
sudo apt update
sudo apt install apache2
sudo apt install php
sudo apt install libapache2-mod-php
sudo apt install php-cli
2. 启用 Apache 模块
sudo a2enmod php* rewrite
sudo systemctl restart apache2
3. 修改 PHP 上传限制
sudo vi /etc/php/8.3/apache2/php.ini # 版本可能不同
修改以下参数:
upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
保存后重启 Apache:
sudo systemctl restart apache2
4. 移动到htmi 文件上传及下载路径地址
cd /var/www/html/
5.创建文件上传路径文件夹
mkdir uploads
chmod -R 777 uploads
6. 创建 PHP 上传脚本
touch upload.php
chmod 777 upload.php
7. 编写 PHP 上传脚本
vi upload.php
输入以下内容
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$uploadDir = 'uploads/';
if (!file_exists($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$targetFile = $uploadDir . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $targetFile)) {
echo "File uploaded successfully: " . $_FILES['file']['name'];
} else {
http_response_code(400);
echo "Error uploading file.";
}
} else {
http_response_code(400);
echo "No file uploaded.";
}
?>
注意
文件内容:
$uploadDir = 'uploads/';
为文件上传相对地址
8. 设置权限
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
至此全部配置设置完成
9.可选步骤,对于文本txt不直接显示,而是直接下载
因为 Apache 默认根据文件类型(MIME Type)决定如何处理文件。对于文本文件(如 .txt、.csv、.json 等),浏览器会直接显示内容,而不是下载
1) 编辑 Apache 配置文件
打开 /etc/apache2/apache2.conf 或 /etc/apache2/sites-available/000-default.conf,
添加以下规则:
<FilesMatch "\.(txt|csv|json|log|md)$">
Header set Content-Disposition "attachment"
</FilesMatch>
2)启用 headers 模块
sudo a2enmod headers
sudo systemctl restart apache2
10.可选步骤,开启put
1)修改Apache 配置文件
vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/uploads">
Options Indexes
Dav On
AllowOverride None
# 允许所有HTTP方法(包括PUT)
<LimitExcept GET POST OPTIONS>
Require all granted
</LimitExcept>
# 或者明确指定允许PUT方法
<Limit PUT>
Require all granted
</Limit>
</Directory>
2)修改PHP文件以支持PUT
vi /var/www/html/upload.php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
$uploadDir = '/var/www/html/uploads/';
$filename = 'uploaded_file.dat'; // 可自定义文件名
$destination = $uploadDir . $filename;
// 从 php://input 读取原始数据并保存
$input = fopen('php://input', 'r');
$target = fopen($destination, 'w');
stream_copy_to_stream($input, $target);
fclose($input);
fclose($target);
echo "File uploaded successfully via PUT!";
} else {
http_response_code(405);
echo "Only PUT method is allowed!";
}
?>
3) 重启模块
sudo a2enmod rewrite
sudo systemctl restart apache2
二、测试阶段
1.测试POST 文件上传
curl -X POST -F "file=@your_file_path.txt" http://localhost/upload.php
如果成功会显示以下内容
File uploaded successfully: file.txt
注意:
your_file_path.txt :为本地文件路径地址
localhost:为服务器地址
file.txt:为上传的文件名称
2.测试 PUT 文件上传
curl -X PUT -d "test.txt" http://106.55.22.42/uploads/test.txt
3.测试 文件下载
创建被下载文件
#移动到文件上传下载目录
cd /var/www/html/uploads
#创建文件
touch test.txt
#写入文件内容
echo "hellow world" > test.txt
直接打开浏览器
http://localhost/uploads/test.txt
当第一阶段未执行第9步骤时,浏览器会直接显示文本内容
当第一阶段执行了第9步骤时,浏览器会直接下载test.txt文件
4192

被折叠的 条评论
为什么被折叠?



