解读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中取得image按钮传递的name值
Oct 09 PHP
php header()函数使用说明
Jul 10 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
Php Ctemplate引擎开发相关内容
Mar 03 PHP
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
Jul 31 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
PHP根据IP地址获取所在城市具体实现
Nov 27 PHP
php实现图片文件与下载文件防盗链的方法
Nov 03 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 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环形链表实现方法示例
2017/09/15 PHP
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
JS弹出层单纯的绝对定位居中示例代码
2014/02/18 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
canvas实现图片根据滑块放大缩小效果
2017/02/24 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
python 从远程服务器下载日志文件的程序
2013/02/10 Python
Python 2.7.x 和 3.x 版本的重要区别小结
2014/11/28 Python
让 python 命令行也可以自动补全
2014/11/30 Python
详解Python中的正则表达式的用法
2015/04/09 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
浅谈python jieba分词模块的基本用法
2017/11/09 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python Series从0开始索引的方法
2018/11/06 Python
python实现图片彩色转化为素描
2019/01/15 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
Win10用vscode打开anaconda环境中的python出错问题的解决
2020/05/25 Python
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
北京RT科技有限公司.net工程师面试题
2013/02/15 面试题
精选干货:Java精选笔试题附答案
2014/01/18 面试题
材料加工硕士生求职信
2013/10/10 职场文书
仓管岗位职责范本
2014/02/08 职场文书
社区反邪教工作方案
2014/06/16 职场文书
借钱欠条怎么写
2015/07/03 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库