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

devtools/2024/11/15 1:29:40/

前情提要:朋友的工作室,有几个网站分布在不同的服务器上,要经常进行更新,之前是手动复制压缩包到各个服务器去更新(有写了自动更新的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 "指定的目录不存在。";
}

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

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

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.ppmy.cn/devtools/133754.html

相关文章

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得&#xff0c;如下图所示&#xff1a; 这个AES加密是通用的加密方式&#xff0c;使用同一套算法&#xff0c;前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作&#xff0c;将…

【RabbitMQ】之高可用集群搭建

一、RabbitMQ 集群简介 1、默认集群原理1-1、RabbitMQ 集群简介 单台 RabbitMQ 服务器处理消息的能力是有瓶颈的&#xff0c;而且可靠性还无法保证&#xff0c;所以需要通过集群来提高消息的吞吐量和提高数据可靠性。 由于 RabbitMQ 本身是基于 Erlang 编写&#xff0c;而 Er…

单体架构 IM 系统之核心业务功能实现

在上一篇技术短文&#xff08;单体架构的 IM 系统设计&#xff09;中&#xff0c;我们讨论了在 “用户规模小、开发人员少、开发时间短” 的业务背景下&#xff0c;采取 “怎么简单怎么做&#xff0c;怎么快怎么来” 的研发策略&#xff0c;于是设计了 单体架构的IM系统&#x…

说说webpack proxy工作原理?为什么能解决跨域

webpack-dev-server 提供了一个 proxy 功能&#xff0c;可以帮助开发者在本地开发时解决跨域问题。要理解其工作原理以及为什么可以解决跨域问题&#xff0c;首先我们需要了解两个关键概念&#xff1a;跨域问题 和 代理的工作方式。 1. 跨域问题的本质 跨域问题是浏览器的同源…

C++并发编程中怎样避免死锁

在C并发编程中&#xff0c;死锁是一个常见的问题&#xff0c;特别是在使用多线程和锁机制时。死锁发生在两个或多个线程互相等待对方释放资源时&#xff0c;导致所有线程都无法继续执行。为了避免死锁&#xff0c;开发人员可以采用一些常用的方法和准则。以下是一些有效的方法和…

[C++]学习《DirectX12 3D 游戏开发实战》 第八天 利用 Direct3D 绘制几何体(续)

本章将介绍一些此书后面常会用到的绘图模式。首先讲解与绘图优化相关的内容&#xff0c;此处涉及“帧资源 (frame resource)”等概念。若采用帧资源&#xff0c;我们就得修改程序中的渲染循环&#xff0c;好处&#xff1a;不必在每一帧都刷新命令队列&#xff0c;继而改善 CPU …

七招提升工作效率

本文介绍了可以有效提升开发者工作效率的七个技巧。原文: 7 Productivity Hacks I Stole From a Principal Software Engineer Domenico Loia Unsplash 你有没有过与工作风格近乎神奇的高级或首席软件工程师共同工作的经验&#xff1f; 想象一下&#xff0c;有个人只需轻轻一点…

命令行工具进阶指南

&#x1f680; 命令行工具进阶指南&#xff1a;Git、Shell与效率工具的进阶之路 掌握命令行工具&#xff0c;让你的开发效率突飞猛进。本文将深入探讨 Git 高级技巧、Shell 脚本自动化以及各种效率倍增的 CLI 工具。 &#x1f4d1; 目录 Git 高级技巧与工作流Shell 脚本自动化…