惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Jina AI
Jina AI
美团技术团队
博客园 - 聂微东
博客园 - 叶小钗
Security Latest
Security Latest
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园_首页
Spread Privacy
Spread Privacy
J
Java Code Geeks
雷峰网
雷峰网
宝玉的分享
宝玉的分享
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Privacy International News Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threat Research - Cisco Blogs
The Hacker News
The Hacker News
量子位
L
LINUX DO - 热门话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
G
GRAHAM CLULEY
D
Darknet – Hacking Tools, Hacker News & Cyber Security
月光博客
月光博客
腾讯CDC
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
罗磊的独立博客
V
Vulnerabilities – Threatpost
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
有赞技术团队
有赞技术团队
Project Zero
Project Zero
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
MyScale Blog
MyScale Blog
T
The Exploit Database - CXSecurity.com
GbyAI
GbyAI
博客园 - 【当耐特】
O
OpenAI News
Schneier on Security
Schneier on Security
S
Secure Thoughts
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
S
Securelist
博客园 - 司徒正美

文章列表 - 她和她的猫

使用小鹤双拼一个月 折腾 Hugo PaperMod 主题 去长鹿旅游休博园 1Password 自动化登录堡垒机 深入 Hyperf:Inject 注解是如何工作的? 译|理解容器镜像层 使用 Rust 实现高性能预写日志(Write Ahead Log) 译|使用 Linux 命名空间隔离系统 深入 Hyperf:HTTP 服务是如何处理请求的? Linux 文件权限学习笔记 译|了解 Bitcask:基于日志结构的 KV 存储引擎 还原 SM2 压缩公钥的几种方法 深入 Hyperf:HTTP 服务启动时发生了什么? 一次 Hyperf 注解失效问题分析 将博客迁移到又拍云 译|PHP 7 新的 Hashtable 实现 排查 ES 查询问题:深入了解 json_encode() 函数 浅析 Redlock 分布式锁实现原理 Yar 源码阅读笔记:RPC 服务端 Yar 源码阅读笔记:客户端的并行调用 Yar 源码阅读笔记:客户端的同步调用 Yar 源码阅读笔记:数据传输模块 Yar 源码阅读笔记:消息编码模块 Yar 源码阅读笔记:RPC 通信协议 Yar 源码阅读笔记:开篇 PHP 8 新特性介绍 基于 OpenSSL 实现国密 SM4 加解密 PHP 源码阅读笔记:编译与调试 PHP 什么是惊群问题 大端模式和小端模式 基于 GitHub Actions 定时推送网址到百度站长平台 聊聊五种 I/O 模型 Workerman 源码分析:文件上传 浅入浅出 HTTP 协议 PHP 网络编程:构建 MySQL 蜜罐获取攻击者微信 ID 使用 Workerman 接入 Bilibili 直播弹幕协议 使用 GitHub Actions 自动部署 Hexo 什么是二进制安全 【转载】PHP 程序员进阶之路 优化 Workerman 检查主进程是否存活的逻辑 基于 Redis 实现分布式锁 《PHP 实现 Base64 编码/解码》笔记 PHP 多进程下载必应壁纸 基于 Redis 实现延迟队列 【转载】PHP 实现 Base64 编码/解码 使用 MySQL FIELD() 函数自定义排序规则 Laravel 的 Facades 实现原理 C语言单链表实现约瑟夫环 数据结构学习笔记:顺序栈和链栈(C语言) 使用 QueryList + Redis 下载壁纸 在 Laravel 登录/注册中使用 mews/captcha 扩展包 使用 mews/captcha 扩展包为 Laravel 应用添加图片验证码 给 YOURLS 短网址系统编写插件《批量生成短网址》 给 YOURLS 短网址系统编写插件《Hello World!》 PHP 7.1 使用 json_encode 函数造成浮点类型数据出现精度问题 Laravel 授权策略(Policy)的基本使用 Ubuntu 系统下 WiFi 频繁掉线解决方法 Laravel 应用部署到 Nginx 服务器上的第一个坑 Ubuntu 16.04 LST 安装 Redis 和 Composer PHP 采集逐浪小说章节列表 Nginx 环境 SSL 强制 HTTP 301 跳转到 HTTPS 【工作&生活】第一周 ServiceStack.Redis 与多线程 Count the number of Duplicates C# Base64 加密及解密 ASP.NET MVC 使用动态类型传递数据 Django 使用 order_by() 对数据进行排序操作 ASP.NET + jQuery + AJAX 实现用户登录 ASP.NET 从客户端中检测到有潜在危险的 Request.Form 值 ASP.NET 使用 FormData 实现 AJAX 上传图片 Python 使用 BeautifulSoup 抓取网页 贪心算法之字符串的完美度 一言不和就造轮子之 CookieHelper ASP.NET 上传图片 DBHelper 类 C# 捕获屏幕源码 用 JavaScript 做一些有趣的事情 第一篇文章 好久不见。 如何防止非法调用 PHP 文件 清明小记。 PHP 生成随机字符串 Z-Blog PHP 程序做 301 跳转 PHP 处理数组常用的几个函数 Sublime Text 3 快捷键总结 PHP 使用 file_get_contents() 函数实现采集网页 使用 C# 编写学生信息管理系统 终于到了。 zblog报错: magic_quotes_gpc 和 safe_mode 世事无常。 安卓手机编写和运行 PHP 程序的软件 使用 AJAX 刷新、验证 PHP 图片验证码 PHP 生成图片验证码 PHP 之 session 的使用方法 PHP 之 cookie 的使用方法 PHP 实现分页原理详解 Thinkphp 框架中系统常量在 Js 文件中不解析的解决方法
如何使用 PHP 上传文件
她和她的猫 · 2016-02-17 · via 文章列表 - 她和她的猫

PHP文件上传在网站开发中应用十分广泛,例如用户上传头像、在文章中插入图片、上传附件等等。今天就讲讲如何使用PHP上传文件。

首先创建一个 HTML 表单,用于提交上传的文件,这里需要注意的是,在上传文件的表单中,必须使设置 enctype=“multipart/form-data” 来确保匿名上传文件的正确编码。

<form action="./upload.php" name="upload_form" method="post" enctype="multipart/form-data">      
<input type="file" name="img">
<input type="submit" name="submit" value="上传">
</form>

input 标签的 type=“file” 属性规定了应该把输入作为文件来处理。用户选择好需要上传的文件以后,点击上传按钮。通过 post 方式提交给 upload.php 文件。当upload.php 接收到提交过来的文件时,PHP 会用一个全局数组 $_FILES 来储存被上传的文件的一些信息,当我们使用 var_dump() 函数打印 $_FILES 数组可以获得以下信息:

  • $_FILES[“img”][“name”] - 被上传文件的名称
  • $_FILES[“img”][“type”] - 被上传文件的类型
  • $_FILES[“img”][“size”] - 被上传文件的大小,以字节计
  • $_FILES[“img”][“tmp_name”] - 存储在服务器的文件的临时副本的名称
  • $_FILES[“img”][“error”] - 由文件上传导致的错误代码我们在upload.php文件中输出这些信息:

这是一种非常简单文件上传方式。但是基于安全方面的考虑,我们应该做一些限制,例如限制用户只能上传格式为 .png 或者 .gif 的图片,且大小必须小于 100kb。

if ($_FILES["img"]["size"] < 10000 && $_FILES["img"]["type"] == "image/png" || $_FILES["img"]["type"] == "image/gif") {
    if ($_FILES["img"]["error"] > 0) {        //当error为0表示上传成功
        echo "错误信息:  " . $_FILES["img"]["error"] . "<br  />";
    } else {
        echo "文件名称:  " . $_FILES["img"]["name"] . "<br  />";
        echo "文件类型:  " . $_FILES["img"]["type"] . "<br  />";
        echo "文件大小:  " . ($_FILES["img"]["size"] / 1024) . "  Kb<br  />";
        echo "文件临时存储路径:  " . $_FILES["img"]["tmp_name"];
    }
} else {
    echo "无效的文件!";
}

上面的例子虽然输出了文件的信息,但是并没有将文件储存在服务器上,只是将被上传的文件放在了服务器的一个临时目录。接下来我们要做的就是使用move_uploaded_file() 函数,把文件从临时目录中移动到我们指定的目录下面。

move_uploaded_file() 语法:move_uploaded_file(“需要移动的文件”, “文件的新位置”)

<?php
if ($_FILES["img"]["size"] < 10000 && $_FILES["img"]["type"] == "image/png" || $_FILES["img"]["type"] == "image/gif") {
    if ($_FILES["img"]["error"] > 0) {        //当error为0表示上传成功
        echo "错误信息:  " . $_FILES["img"]["error"] . "<br  />";
    } else {
        echo "文件名称:  " . $_FILES["img"]["name"] . "<br  />";
        echo "文件类型:  " . $_FILES["img"]["type"] . "<br  />";
        echo "文件大小:  " . ($_FILES["img"]["size"] / 1024) . "  Kb<br  />";
        echo "文件临时存储路径:  " . $_FILES["img"]["tmp_name"] . "<br/>";
        move_uploaded_file($_FILES["img"]["tmp_name"], "upload/" . $_FILES["img"]["name"]);
        echo "移动后的路径:  " . "upload/" . $_FILES["img"]["name"];
    }
} else {
    echo "无效的文件!";
}
?>

在上面的代码中, 我们将文件保存到了名为 “upload” 的新文件夹。

注:必须确认"upload"已存在,否则将会报错。

好了,关于如何使用文件上传已经讲完了,你看懂了吗?

这是一篇过去很久的文章,其中的信息可能已经有所发展或是发生改变。