解读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&amp;&amp;mysql)六
Oct 09 PHP
用PHP程序实现支持页面后退的两种方法
Jun 30 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
PHP将HTML转换成文本的实现代码
Jan 21 PHP
php发送与接收流文件的方法
Feb 11 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
简单的自定义php模板引擎
Aug 26 PHP
PHP与以太坊交互详解
Aug 24 PHP
PHP随机数函数rand()与mt_rand()的讲解
Mar 25 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
世界上第一台立体声收音机
2021/03/01 无线电
php不用正则采集速度探究总结
2008/03/24 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
PHP带节点操作的无限分类实现方法详解
2016/11/09 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
python聊天程序实例代码分享
2013/11/18 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
keras模型保存为tensorflow的二进制模型方式
2020/05/25 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
中医专业应届生求职信
2013/11/17 职场文书
有趣的广告词
2014/03/18 职场文书
感恩寄语大全
2014/04/11 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
党员自评材料范文
2014/12/17 职场文书
监理中标通知书
2015/04/16 职场文书
倡议书的格式写法
2015/04/28 职场文书
车位出租协议书范本
2016/03/19 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server
python实现商品进销存管理系统
2022/05/30 Python