解读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中时间轴开发(刚刚、5分钟前、昨天10:23等)
Oct 03 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
PHP下载远程图片并保存到本地方法总结
Jan 22 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
PHP中FTP相关函数小结
Jul 15 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 PHP
用php实现分页效果的示例代码
Dec 10 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自定义函数call_user_func和call_user_func_array详解
2011/07/14 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
php实现的通用图片处理类
2015/03/24 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
10个实用的脚本代码工具
2010/05/04 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
jquery easyui combobox模糊过滤(示例代码)
2013/11/30 Javascript
javascript的函数作用域
2014/11/12 Javascript
js动态切换图片的方法
2015/01/20 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
[42:32]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第二局
2016/02/27 DOTA
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
python学生信息管理系统实现代码
2019/12/17 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
记帐员岗位责任制
2014/02/08 职场文书
企业宣传方案
2014/03/04 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
springboot用户数据修改的详细实现
2022/04/06 Java/Android