解读PHP中上传文件的处理问题


Posted in PHP onMay 29, 2016

我们在浏览器中编辑自己的信息,会遇到上传头像;在文库中,我们会上传文档......到处存在“上传”这个词。

php是最好的语言(其他语言的程序猿们不要打我...)。php在处理交互方面有天然的优势,自然有强大的函数来处理上传文件。

和提交一般的数据一样,上传文件也需要表单。下面建立一个特殊的表单来上传文件。

<form enctype="multipart/form-data" action="upload_file.php" name="upload_form" method="post">
<!--MAX_FILE_SIZE必须在所有的input之前,以后要是想用上传表单,可以在form之后就写隐藏的input-->
<input type="hidden" name="MAX_FILE_SIZE" value=""/>
上传的文件:
<input type="file" name="userfile"/>
<input type="submit" name="sub_button" value="上传文件的提交按钮"/>
</form>

ok,我们分析一下这个代码段。

以上的enctype规定了数据在发送给服务器的时候采用什么编码格式。它有三个值:

解读PHP中上传文件的处理问题

MAX_FILE_SIZE隐藏字段(单位为字节)必须放在文件输入字段之前,其值为文件的最大尺寸。这是对浏览器的一个建议,php也会检查此项。不过在浏览器端可以绕过这个障碍,因此不要指望用它来阻挡大文件。但是文件最大值受php.ini中的post_max_size= (number)M的限制。但是最好还是加上这个项目,它可以避免用户在花时间等待上传大文件之后才发现大文件上传失败的麻烦。

在用户提交文件表单之后,服务器端就可以接受数据了。PHP中有全局变量$_FILES来处理文件,假设上传字段名称为userfile(可以在字段中随意更改)。

$_FILES['userfile']['name'] 客户端文件的原名称。

$_FILES['userfile']['type'] 文件的MIME类型,这个在PHP端并不检查,因此这个值还不一定有。

$_FILES['userfile']['size'] 上传的文件的大小(单位字节)。
        $_FILES['userfile']['tmp_name'] 文件上传后在服务器端存储的临时文件名。

$_FILES['userfile']['error'] 和该文件上传相关的错误代码。如果上传成功,值为0.

文件在上传后,默认存储到服务器默认临时目录中,在php.ini中的upload_tmp_dir设置为其他路径。

在这里还得说说一个move_uploaded_file()函数:

解读PHP中上传文件的处理问题

这个函数检查并确保由 file 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 newloc 指定的文件。

如果 file 不是合法的上传文件,不会出现任何操作,move_uploaded_file() 将返回 false。

如果 file 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file() 将返回 false,此外还会发出一条警告。

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

下面是一个php上传文件实例:

<b>上传文件处理</b>
<?php
if (isset($_FILES['userfile'])) {
$uploaddir = 'upload/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo '上传文件成功'.'<br>';
} else {
echo '上传文件失败'.'<br>';
}
echo '这是上传文件的一些信息:' . '<br>';
print_r($_FILES);
echo '<pre>';
die();
}
?>
<b>上传表单</b>
<!--表单中的enctype属,必须和以下定义保持一致-->
<form enctype="multipart/form-data" action="upload_file.php" name="upload_form" method="post">
<!--MAX_FILE_SIZE必须在所有的input之前,以后要是想用上传表单,可以在form之后就写隐藏的input-->
<input type="hidden" name="MAX_FILE_SIZE" value=""/>
上传的文件:
<input type="file" name="userfile"/>
<hr/>
<input type="submit" name="sub_button" value="上传文件的提交按钮"/>
</form>

解读PHP中上传文件的处理问题

PHP 相关文章推荐
用PHP将数据导入到Foxmail
Oct 09 PHP
删除无限分类并同时删除它下面的所有子分类的方法
Aug 08 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
PHP中通过语义URL防止网站被攻击的方法分享
Sep 08 PHP
更改localhost为其他名字的方法
Feb 10 PHP
ThinkPHP的MVC开发机制实例解析
Aug 23 PHP
3种php生成唯一id的方法
Nov 23 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
Aug 12 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
May 06 PHP
round robin权重轮循算法php实现代码
May 28 #PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 #PHP
php获取一定范围内取N个不重复的随机数
May 28 #PHP
smarty的section嵌套循环用法示例
May 28 #PHP
PHP引用返回用法示例
May 28 #PHP
php时间函数用法分析
May 28 #PHP
zend framework重定向方法小结
May 28 #PHP
You might like
自动跳转中英文页面
2006/10/09 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php生成与读取excel文件
2016/10/14 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
几个比较经典常用的jQuery小技巧
2010/03/01 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery ui resize 中border-box的bug修正
2015/04/26 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python代码的打包与发布详解
2014/07/30 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
python如何进入交互模式
2020/07/06 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
如何开发一个JQuery插件
2016/07/28 面试题
致跳远、跳高运动员广播稿
2014/01/09 职场文书
大专会计自我鉴定
2014/02/06 职场文书
卖房授权委托书样本
2014/10/05 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
群众路线教育实践活动方案
2014/10/31 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
初中优秀学生评语
2014/12/29 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python