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

相关推荐
用户03284722207014 小时前
如何搭建本地yum源(上)
运维
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982073 天前
PHP 扩展——从入门到理解
php
鹏仔先生3 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
大树884 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠4 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质4 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工4 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智4 天前
ARP代理--工作原理
运维·网络·arp·arp代理