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

news2025/2/25 11:00:59

前情提要:朋友的工作室,有几个网站分布在不同的服务器上,要经常进行更新,之前是手动复制压缩包到各个服务器去更新(有写了自动更新的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.coloradmin.cn/o/2242275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 (4)计算机网络体系结构

前言 计算机网络体系结构是指计算机网络层次结构模型&#xff0c;它是各层的协议以及层次之间的端口的集合。这一体系结构为计算机网络及其部件应完成的功能提供了精确定义&#xff0c;并规定了这些功能应由何种硬件或软件来实现。 一、主流模型 计算机网络体系结构存在多种模型…

C++- 基于多设计模式下的同步异步日志系统

第一个项目:13万字,带源代码和详细步骤 目录 第一个项目:13万字,带源代码和详细步骤 1. 项目介绍 2. 核心技术 3. 日志系统介绍 3.1 为什么需要⽇志系统 3.2 ⽇志系统技术实现 3.2.1 同步写⽇志 3.2.2 异步写⽇志 4.知识点和单词补充 4.1单词补充 4.2知识点补充…

小程序租赁系统打造便捷租赁体验助力共享经济发展

内容概要 小程序租赁系统是一个极具创新性的解决方案&#xff0c;它通过简化租赁过程&#xff0c;让物品的共享变得便捷流畅。对于那些有闲置物品的用户来说&#xff0c;他们可以轻松发布自己的物品&#xff0c;让其他需要的人快速找到并租借。而对于找东西的人来说&#xff0…

EXCEL 或 WPS 列下划线转驼峰

使用场景&#xff1a; 需要将下划线转驼峰&#xff0c;直接在excel或wps中第一行使用公式&#xff0c;然后快速刷整个列格式即可。全列工下划线转为格式&#xff0c;使用效果如下&#xff1a; 操作步骤&#xff1a; 第一步&#xff1a;在需要显示驼峰的一列&#xff0c;复制以…

【SpringBoot】公共字段自动填充

问题引入 JavaEE开发的时候&#xff0c;新增字段&#xff0c;修改字段大都会涉及到创建时间(createTime)&#xff0c;更改时间(updateTime)&#xff0c;创建人(craeteUser)&#xff0c;更改人(updateUser)&#xff0c;如果每次都要自己去setter()&#xff0c;会比较麻烦&#…

华为云租户网络-用的是隧道技术

1.验证租户网络是vxlan 2.验证用OVS 2.1控制节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.8 2.2计算节点VXLAN 本端ip&#xff08;local ip&#xff09;192.168.31.11 计算节点用的是bond0做隧道网络 2.3查看bond文件是否主备模式

网络编程-002-UDP通信

1.UDP通信的简单介绍 1.1不需要通信握手,无需维持连接,网络带宽需求较小,而实时性要求高 1.2 包大小有限制,不发大于路径MTU的数据包 1.3容易丢包 1.4 可以实现一对多,多对多 2.客户端与服务端=发送端与接收端 代码框架 收数据方一般都是客户端/接收端 3.头文件 #i…

从PE结构到LoadLibrary

从PE结构到LoadLibrary PE是Windows平台主流可执行文件格式,.exe , .dll, .sys, .com文件都是PE格式 32位的PE文件称为PE32&#xff0c;64位的称为PE32&#xff0c;PE文件格式在winnt.h头中有着详细的定义&#xff0c;PE文件头包含了一个程序在运行时需要的所有信息&#xff…

AntFlow:一款高效灵活的开源工作流引擎

AntFlow 是一款功能强大、设计优雅的开源工作流引擎&#xff0c;其灵感来源于钉钉的工作流设计理念&#xff0c;旨在为企业和开发者提供灵活、高效的工作流解决方案。AntFlow 支持复杂的业务流程管理&#xff0c;具有高度可定制性&#xff0c;且拥有现代化的前端设计&#xff0…

智慧安防丨以科技之力,筑起防范人贩的铜墙铁壁

近日&#xff0c;贵州省贵阳市中级人民法院对余华英拐卖儿童案做出了一审宣判&#xff0c;判处其死刑&#xff0c;剥夺政治权利终身&#xff0c;并处没收个人全部财产。这一判决不仅彰显了法律的威严&#xff0c;也再次唤起了社会对拐卖儿童犯罪的深切关注。 余华英自1993年至2…

python机器人Agent编程——多Agent框架的底层逻辑(上)

目录 一、前言二、两个核心概念2.1 Routines&#xff08;1&#xff09;清晰的Prompt&#xff08;2&#xff09;工具调用json schema自动生成&#xff08;3&#xff09;解析模型的toolcall指令&#xff08;4&#xff09;单Agent的循环决策与输出 PS.扩展阅读ps1.六自由度机器人相…

【大语言模型】ACL2024论文-14 任务:不可能的语言模型

【大语言模型】ACL2024论文-14 任务&#xff1a;不可能的语言模型 目录 文章目录 【大语言模型】ACL2024论文-14 任务&#xff1a;不可能的语言模型目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数和推荐理由 后记 任务&#xff1a;不可能…

redis linux 安装

下载解压 https://download.redis.io/releases/ tar -zvxf ----redis-7.4.1编译 进入目录下 # redis 依赖c yum install gcc-cmake可能会有问题&#xff0c;所以记得换源# 安装到 /usr/local/redis make PREFIX/usr/local/redis installcd src ./redis-serverredis.confi…

计算机毕业设计Hadoop+大模型空气质量预测 空气质量可视化 空气质量分析 空气质量爬虫 Spark 机器学习 深度学习 Django 大模型

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

云原生之运维监控实践-使用Telegraf、Prometheus与Grafana实现对InfluxDB服务的监测

背景 如果你要为应用程序构建规范或用户故事&#xff0c;那么务必先把应用程序每个组件的监控指标考虑进来&#xff0c;千万不要等到项目结束或部署之前再做这件事情。——《Prometheus监控实战》 去年写了一篇在Docker环境下部署若依微服务ruoyi-cloud项目的文章&#xff0c;当…

HTML+CSS+JavaScript

一、HTML 1、什么是HTML HTML&#xff08;Hyper Text Markup Language&#xff09;也叫超文本标记语言&#xff0c;什么意思呢&#xff1f; 超文本&#xff1a;普通文本语言没有什么特殊功能&#xff0c;而超文本&#xff0c;是表示一种比文本语言功能更强大的语言&#xff0c…

Dropout 和 BatchNorm 在训练和验证中的差异

文章目录 1. Dropout1.1 作用1.2 训练和验证的差异1.3 示例 2. Batch Normalization (BatchNorm)2.1 作用2.2 训练和验证时的差异2.3 示例 3. 总结4. 实际使用建议 在神经网络中&#xff0c;Dropout 和 Batch Normalization (BatchNorm) 是常见的层&#xff0c;其行为在 训练阶…

SQL Server 查询设置 - LIKE/DISTINCT/HAVING/排序

目录 背景 一、LIKE - 模糊查询 1. 通配符 % 2. 占位符 _ 3. 指定集合 [] 3.1 表示否定 ^ 3.2 表示范围 - 4. 否定 NOT 二、DISTINCT - 去重查询 三、HAVING - 过滤查询 四、小的查询设置 1. ASC|DESC - 排序 2. TOP - 限制 3. 子查询 4. not in - 取补集&…

【算法速刷(10/100)】LeetCode —— 23. 合并 K 个升序链表

按照最朴素的方法&#xff0c;每轮都对所给列表进行一次遍历&#xff0c;O(n)的复杂度获得值最小的节点&#xff0c;并将其上的链表指针后移一位&#xff0c;一旦为空则剔除数组。数组为空时结束循环。 这样写时间复杂度较高&#xff0c;因为涉及到枚举最小值节点&#xff0c;数…

【C语言】四种方法交换两个数(免费复制)

方法一&#xff1a; 通过中间变量t直接交换。 #include<stdio.h> //方法一 int main() {int a,b,t;printf("请输入a和b的值&#xff1a;\n");scanf("%d %d",&a,&b);printf("交换前&#xff1a;a%d,b%d\n",a,b);ta;ab;bt;printf…