轻松实现php文件上传功能


Posted in PHP onFebruary 17, 2017

PHP 文件上传

通过 PHP,可以把文件上传到服务器。

本章节实例在 test 项目下完成,目录结构为:

test
|-----upload             # 文件上传的目录
|-----form.html          # 表单文件
|-----upload_file.php    # php 上传代码

源码下载:文件上传

创建一个文件上传表单
允许用户从表单上传文件是非常有用的。
请看下面这个供上传文件的 HTML 表单:

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
 <label for="file">文件名:</label>
 <input type="file" name="file" id="file"><br>
 <input type="submit" name="submit" value="提交">
</form>

</body>
</html>

将以上代码保存到 form.html 文件中。
有关上面的 HTML 表单的一些注意项列举如下:

1.<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
2.<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。

创建上传脚本
"upload_file.php" 文件含有供上传文件的代码:

<?php
if ($_FILES["file"]["error"] > 0)
{
 echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
 echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
 echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可以是 "name"、"type"、"size"、"tmp_name" 或 "error"。如下所示:
$_FILES["file"]["name"] - 上传文件的名称
$_FILES["file"]["type"] - 上传文件的类型
$_FILES["file"]["size"] - 上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关允许哪些用户上传文件的限制。

上传限制
在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);  // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
 if ($_FILES["file"]["error"] > 0)
 {
 echo "错误:: " . $_FILES["file"]["error"] . "<br>";
 }
 else
 {
 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
 echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
 echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
 }
}
else
{
 echo "非法的文件格式";
}
?>

保存被上传的文件
上面的实例在服务器的 PHP 临时文件夹中创建了一个被上传文件的临时副本。
这个临时的副本文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);  // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
 if ($_FILES["file"]["error"] > 0)
 {
 echo "错误:: " . $_FILES["file"]["error"] . "<br>";
 }
 else
 {
 echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
 echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
 echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
 echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
 
 // 判断当期目录下的 upload 目录是否存在该文件
 // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
 if (file_exists("upload/" . $_FILES["file"]["name"]))
 {
 echo $_FILES["file"]["name"] . " 文件已经存在。 ";
 }
 else
 {
 // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
 move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
 echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
 }
 }
}
else
{
 echo "非法的文件格式";
}
?>

上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的目录下。
文件上传演示操作如下所示:

轻松实现php文件上传功能

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP4之COOKIE支持详解
Oct 09 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
php 广告调用类代码(支持Flash调用)
Aug 11 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
php生成shtml类用法实例
Dec 09 PHP
php实现模拟post请求用法实例
Jul 11 PHP
PHP基于单例模式实现的数据库操作基类
Jan 15 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
PHP getNamespaces()函数讲解
Feb 03 PHP
PHP数组实际占用内存大小原理解析
Dec 11 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 #PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
Feb 17 #PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 #PHP
php使用str_shuffle()函数生成随机字符串的方法分析
Feb 17 #PHP
Json_decode 解析json字符串为NULL的解决方法(必看)
Feb 17 #PHP
PHP中单例模式与工厂模式详解
Feb 17 #PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 #PHP
You might like
php生成EXCEL的东东
2006/10/09 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
php &amp;&amp; 逻辑与运算符使用说明
2010/03/04 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
php限制ip地址范围的方法
2015/03/31 PHP
php中使用GD库做验证码
2016/03/31 PHP
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
简单谈谈ES6的六个小特性
2016/11/18 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
python 画三维图像 曲面图和散点图的示例
2018/12/29 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
工程测量与监理专业应届生求职信
2013/11/27 职场文书
安全生产实施方案
2014/02/23 职场文书
入党自我鉴定
2014/03/25 职场文书
道德演讲稿
2014/05/21 职场文书
2014年采购工作总结
2014/11/20 职场文书
三八妇女节寄语
2015/02/27 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
Django框架中表单的用法
2022/06/10 Python