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 相关文章推荐
Access数据库导入Mysql的方法之一
Oct 09 PHP
php 静态化实现代码
Mar 20 PHP
PHP文件读写操作相关函数总结
Nov 18 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
Zend Framework分发器用法示例
Dec 11 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 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同时支持GIF、png、JPEG
2006/10/09 PHP
PHP 分页原理分析,大家可以看看
2009/12/21 PHP
php url地址栏传中文乱码解决方法集合
2010/06/25 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
最适应的vue.js的form提交涉及多种插件【推荐】
2018/08/27 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
Python实现string字符串连接的方法总结【8种方式】
2018/07/06 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
2019/05/13 Python
python之拟合的实现
2019/07/19 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
实例代码讲解Python 线程池
2020/08/24 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
给护士表扬信
2014/01/19 职场文书
父亲八十大寿答谢词
2014/01/23 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
创先争优个人承诺书
2014/08/30 职场文书
大学生个人总结范文
2015/02/15 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书