PHP 图片文件上传实现代码


Posted in PHP onDecember 29, 2010

为了网站的安全,肯定不让上传php文件,如果有人进入你的后台,上传了一个php文件,你的网站源码,全部救变成他的了,直接打包看你的代码。所以一定要控制上传的目录与文件类型,一般只可以上传图片。

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

<html> 
<body> 
<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</body> 
</html>

请留意如下有关此表单的信息:
<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用 "multipart/form-data"。
<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。
创建上传脚本
"upload_file.php" 文件含有供上传文件的代码:
<?php 
if ($_FILES["file"]["error"] > 0) 
{ 
echo "Error: " . $_FILES["file"]["error"] . "<br />"; 
} 
else 
{ 
echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 
echo "Stored in: " . $_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 文件,文件大小必须小于 20 kb:
<?php 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 20000)) 
{ 
if ($_FILES["file"]["error"] > 0) 
{ 
echo "Error: " . $_FILES["file"]["error"] . "<br />"; 
} 
else 
{ 
echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 
echo "Stored in: " . $_FILES["file"]["tmp_name"]; 
} 
} 
else 
{ 
echo "Invalid file"; 
} 
?>

注释:对于 IE,识别 jpg 文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。
保存被上传的文件
上面的例子在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:
<?php 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/pjpeg")) 
&& ($_FILES["file"]["size"] < 20000)) 
{ 
if ($_FILES["file"]["error"] > 0) 
{ 
echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
} 
else 
{ 
echo "Upload: " . $_FILES["file"]["name"] . "<br />"; 
echo "Type: " . $_FILES["file"]["type"] . "<br />"; 
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />"; 
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; 
if (file_exists("upload/" . $_FILES["file"]["name"])) 
{ 
echo $_FILES["file"]["name"] . " already exists. "; 
} 
else 
{ 
move_uploaded_file($_FILES["file"]["tmp_name"], 
"upload/" . $_FILES["file"]["name"]); 
echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
} 
} 
} 
else 
{ 
echo "Invalid file"; 
} 
?>

上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。
注释:这个例子把文件保存到了名为 "upload" 的新文件夹。
PHP 相关文章推荐
php 使用post,get的一种简洁方式
Apr 25 PHP
THINKPHP内容分页代码分享
Jan 14 PHP
PHP中使用socket方式GET、POST数据实例
Apr 02 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
thinkphp制作404跳转页的简单实现方法
Sep 22 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
PHP实现二维数组中的查找算法小结
Jun 09 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
Yii框架的布局文件实例分析
Sep 04 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 #PHP
php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
Dec 29 #PHP
上传文件先创建目录 再上传到目录里面去
Dec 29 #PHP
php输出表格的实现代码(修正版)
Dec 29 #PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 #PHP
PHP的autoload自动加载机制使用说明
Dec 28 #PHP
php的ajax框架xajax入门与试用介绍
Dec 19 #PHP
You might like
黑夜路人出的几道php笔试题
2009/08/04 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
解读Python编程中的命名空间与作用域
2015/10/16 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
详解Python是如何实现issubclass的
2019/07/24 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
2019/08/19 Python
python实现从ftp服务器下载文件
2020/03/03 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
HTML5标签大全
2016/11/23 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
新闻学毕业生自荐信
2013/11/15 职场文书
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
cf战队收人广告词
2014/03/14 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
学校安全防火方案
2014/06/07 职场文书
基层党支部整改方案
2014/10/25 职场文书
工作年限证明模板
2014/11/01 职场文书
碧霞祠导游词
2015/02/09 职场文书
教师工作表现自我评价
2015/03/05 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书