轻松实现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 相关文章推荐
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
PHP中读取文件的8种方法和代码实例
Aug 05 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php字符串过滤与替换小结
Jan 26 PHP
用PHP代码给图片加水印
Jul 01 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
PhpStorm配置Xdebug调试的方法步骤
Feb 02 PHP
PHP自动生成缩略图函数的源码示例
Mar 18 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 $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
PHP多文件上传实例
2015/07/09 PHP
使用PHPCMS搭建wap手机网站
2015/09/20 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
JavaScript两种跨域技术全面介绍
2014/04/16 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
js实现获取div坐标的方法
2015/11/16 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
Angular 4.x 动态创建表单实例
2017/04/25 Javascript
几种响应式文字详解
2017/05/19 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
[52:52]完美世界DOTA2联赛PWL S3 LBZS vs access 第一场 12.10
2020/12/13 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python 实现链表实例代码
2017/04/07 Python
Pycharm创建项目时如何自动添加头部信息
2019/11/14 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
迪奥官网:Dior.com
2018/12/04 全球购物
运动会入场词200字
2014/02/15 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
简单租房协议书
2014/10/21 职场文书
师德师风个人总结
2015/02/06 职场文书
三八妇女节寄语
2015/02/27 职场文书
储备店长岗位职责
2015/04/14 职场文书