ubuntu 搭建http 服务器 支持文件上传及下载(Apache + PHP)

一、安装及配置阶段

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文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼儿-余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值