解读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 和 XML: 使用expat函数(一)
Oct 09 PHP
php下载文件的代码示例
Jun 29 PHP
php防止sql注入代码实例
Dec 18 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
简单谈谈php中ob_flush和flush的区别
Nov 27 PHP
浅析Yii2 GridView实现下拉搜索教程
Apr 22 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
PHP lcfirst()函数定义与用法
Mar 08 PHP
php7 list()、session及其他模块的修改实例分析
May 25 PHP
PHP序列化和反序列化深度剖析实例讲解
Dec 29 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中OO之静态关键字以及类常量的详解
2013/06/07 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
python 实现归并排序算法
2012/06/05 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
人工智能最火编程语言 Python大战Java!
2017/11/13 Python
详解python上传文件和字符到PHP服务器
2017/11/24 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
Python递归求出列表(包括列表中的子列表)的最大值实例
2020/02/27 Python
Python如何使用神经网络进行简单文本分类
2021/02/25 Python
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
大型晚会策划方案
2014/02/06 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
升旗仪式主持词
2014/03/19 职场文书
大学专科自荐信
2014/06/17 职场文书
学校安全管理制度
2015/08/06 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
Python+Appium自动化测试的实战
2021/06/30 Python