解读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类
Nov 25 PHP
UCenter Home二次开发指南
May 28 PHP
php echo()和print()、require()和include()函数区别说明
Mar 27 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php中使用DOM类读取XML文件的实现代码
Dec 14 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
PHP反射机制用法实例
Aug 28 PHP
Yii2隐藏frontend/web和backend/web的方法
Dec 12 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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
使用php显示搜索引擎来的关键词
2014/02/13 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
js 深拷贝函数
2008/12/04 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
wxPython中listbox用法实例详解
2015/06/01 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python添加模块搜索路径方法
2017/09/11 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python实现图片彩色转化为素描
2019/01/15 Python
Python制作exe文件简单流程
2019/01/24 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
python双向链表原理与实现方法详解
2019/12/03 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
几道数据库的面试题或笔试题
2014/05/31 面试题
企业车辆管理制度
2014/01/24 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
房地产广告策划方案
2014/05/15 职场文书
本科生自荐信
2014/06/18 职场文书
计算机科学与技术专业求职信
2014/09/03 职场文书
通知的格式范文
2015/04/27 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书
MySQL之DML语言
2021/04/05 MySQL
Python+Tkinter制作专属图形化界面
2022/04/01 Python