IT运维的365天--019 用php做一个简单的文件上传工具

前情提要:朋友的工作室,有几个网站分布在不同的服务器上,要经常进行更新,之前是手动复制压缩包到各个服务器去更新(有写了自动更新的Shell脚本)。但还是觉得太麻烦,每次还要手动传输压缩包到各个对应的工作室内网服务器上。于是想着说统一放在一个网站里,然后,每个服务器到这个网站去获取更新包下来再进行更新。于是有了这一篇文章。

先是在域名的控制台新增一个A记录到统一的一个服务器上,再新增一个CNAME别名upgrade指向到@ (@即代表域名本体),当然也可以直接upgrade做A记录,自己喜好,不做强求。

下一步就是宝塔那边新增网站,php版本那边默认是PHP-80或者其他版本,如果不是PHP就要选择下对应安装的版本了。

新建php文件,这里命名upload.php,代码如下:

php 复制代码
<?php

// 检查是否有文件上传
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 设置上传目录
    $uploadDir = 'uploads/';
    // 获取上传的文件信息
    $fileName = basename($_FILES['fileToUpload']['name']);
    $targetFilePath = $uploadDir . $fileName;

    // 检查上传目录是否存在,如果不存在则创建
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    // 尝试移动上传的文件
    if (move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $targetFilePath)) {
        echo "文件上传成功: <a href='download.php?file=$fileName'>$fileName</a>";
    } else {
        echo "文件上传失败.";
    }
}
?>

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <h1>上传文件</h1>
    <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="fileToUpload" required>
        <input type="submit" value="上传文件">
    </form>
</body>
</html>

刷新网页效果如下:

而页面有点单调,我想再增加显示当前目录下的文件在php代码中加入如下代码:

php 复制代码
// 定义要列出文件的文件夹路径
$directory = 'uploads/';

// 检查目录是否存在
if (is_dir($directory)) {
    // 获取目录中的文件和文件夹
    $files = scandir($directory);

    // 遍历文件和文件夹
    foreach ($files as $file) {
        // 排除当前目录(.)和上级目录(..)
        if ($file !== '.' && $file !== '..') {
            // 获取文件的完整路径
            $filePath = $directory . DIRECTORY_SEPARATOR . $file;

            // 检查是否是文件
            if (is_file($filePath)) {
                // 获取文件大小(单位:字节)
                $fileSize = filesize($filePath);
                // 获取文件最后修改时间
                $fileMTime = date("Y-m-d H:i:s", filemtime($filePath));

                // 输出文件信息
                echo "文件名: $file | 大小: $fileSize 字节 | 修改时间: $fileMTime <br>";
            }
        }
    }
} else {
    echo "指定的目录不存在。";
}

保存并刷新网页。效果如下:

至此,一个简单的文件上传网页好了。需要下载的时候,文件的链接是这样的格式:

html 复制代码
https://upgrade.xxxx.com/uploads/web.zip

本来得意满满,以为又搞定了一个事情,直至后来要上传大文件,出错了。。打脸来的如此之快。。^+^

错误如下:

这意思就是文件太大了呗~~百度起来,给我推荐了大佬的文章:

413 Request Entity Too Large【解决】_413 request entity too large nginx php-CSDN博客

根据大佬的提示去nginx的配置文件查看,去php的配置文件也确认了,内容如下:

具体网站的配置文件里:

server {

...

client_max_body_size 100M; # 设置允许的最大请求体大小为100MB

...

}

nginx全局的配置文件里:

http {

...

client_max_body_size 100M;

...

}

应该只要配置一个就可以的。

重新载入 nginx 使得配置更改生效

sudo nginx -s reload

php的配置文件里:

post_max_size = 100M

我重启了nginx,也重启了php,都不生效,还是报错误,无奈,我重启了服务器后,生效了~

所以有没有懂的大佬,告诉我问题在哪?

所以,有和我一样不生效的伙伴,重启服务器吧。^_^

PS: 后来我发现,本身宝塔UI界面里就有直接更改的地方,不需要去更改配置文件,PHP的修改位置和nginx的修改位置分别截图如下:

附带一个,Linux里获取我们上传的文件命令:

curl -o admin-inner.zip https://upgrade.xxxx.com/uploads/web.zip

相关推荐
宇钶宇夕1 小时前
MODBUS RTU通信协议详解与调试指南
运维·程序人生·自动化
小羊Linux客栈4 小时前
自动化:批量文件重命名
运维·人工智能·python·自动化·游戏程序
伤不起bb5 小时前
MySQL 高可用
linux·运维·数据库·mysql·安全·高可用
whgjjim7 小时前
docker迅雷自定义端口号、登录用户名密码
运维·docker·容器
James. 常德 student10 小时前
网络安全知识点
安全·web安全·php
瀚高PG实验室10 小时前
连接指定数据库时提示not currently accepting connections
运维·数据库
QQ27402875610 小时前
Soundness Gitpod 部署教程
linux·运维·服务器·前端·chrome·web3
淡忘_cx10 小时前
【frp XTCP 穿透配置教程
运维
南方以南_10 小时前
Ubuntu操作合集
linux·运维·ubuntu
爱莉希雅&&&12 小时前
shell脚本之条件判断,循环控制,exit详解
linux·运维·服务器·ssh