当前位置: 首页 > article >正文

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

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

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

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

新建php文件,这里命名upload.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代码中加入如下代码:


// 定义要列出文件的文件夹路径
$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 "指定的目录不存在。";
}

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

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

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


http://www.kler.cn/a/390546.html

相关文章:

  • openSUSE 环境下通过 zypper 安装软件
  • AtomicInteger 和 AtomicIntegerFieldUpdater的区别
  • Mit6.S081-实验环境搭建
  • Gurobi学术版+Anaconda安装步骤
  • const限定符-C语言中指针的“可变与不可变”法则
  • 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同?
  • go 下划线 _ 被称为“空白标识符
  • 【Lucene】全文检索 vs 顺序扫描,为何建立索引比逐个文件搜索更高效?
  • 第 4 章 - Go 语言变量与常量
  • 构造函数原型对象语法、原型链、原型对象
  • hadoop开发环境搭建
  • 【论文速看】DL最新进展20241112-3D、异常检测、车道线检测
  • Python科学计算的利器:Scipy库深度解析
  • [滑动窗口] 长度最小的子数组, 无重复字符的最长子串, 最大连续1的个数③
  • SQL Server 索引如何优化?
  • 使用轻易云平台高效集成聚水潭与南网订单数据
  • 侯宗原国学退费:学会易理摆脱精神内耗
  • 揭开 gRPC、RPC 、TCP和UDP 的通信奥秘
  • Chrome与火狐哪个浏览器的移动版本更流畅
  • Unity3D 帧同步定点数物理引擎解决方案详解
  • 树-好难-疑难_GPT
  • spark的学习-04
  • 人工智能在智能家居中的应用
  • 【分布式事务】二、NET8分布式事务实践: DotNetCore.CAP 框架 、 消息队列(RabbitMQ)、 多类型数据库(MySql、MongoDB)
  • cmake同名无法创建(已解决,未深入探究)
  • Spring MVC 面试常问问题