解读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和ACCESS写聊天室(九)
Oct 09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
PHP图片库imagemagick安装方法
Sep 23 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
PHP多线程类及用法实例
Dec 03 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
基于php实现的验证码小程序
Dec 13 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
PHP清除缓存的几种方法总结
Sep 12 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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递归函数返回值使用方法
2013/02/18 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
2017/04/18 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
js prototype截取字符串函数
2010/04/01 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
Node.js编码规范
2014/07/14 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
详解AngularJs ui-router 路由的简单介绍
2017/04/26 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
VueJs里利用CryptoJs实现加密及解密的方法示例
2019/04/29 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Django Form 实时从数据库中获取数据的操作方法
2019/07/25 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
优秀学生党员先进事迹材料
2014/05/29 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
jquery插件实现代码雨特效
2021/04/24 jQuery
Win11显卡控制面板打开显卡设置方法
2022/04/20 数码科技