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 相关文章推荐
自己前几天写的无限分类类
Feb 14 PHP
关于页面优化和伪静态
Oct 11 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
php从数组中随机抽取一些元素的代码
Nov 05 PHP
PDO版本问题 Invalid parameter number: no parameters were bound
Jan 06 PHP
解决Codeigniter不能上传rar和zip压缩包问题
Mar 07 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 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中数据的批量导入(csv文件)
2006/10/09 PHP
php中利用post传递字符串重定向的实现代码
2011/04/21 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
jQuery 1.0.2
2006/10/11 Javascript
javascript数组组合成字符串的脚本
2021/01/06 Javascript
Table冻结表头示例代码
2013/08/20 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
ClearTimeout消除闪动实例代码
2016/02/29 Javascript
javascript基础知识
2016/06/07 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
react系列从零开始_简单谈谈react
2017/07/06 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
Python with标签使用方法解析
2020/01/17 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
Python内存泄漏和内存溢出的解决方案
2020/09/26 Python
英国蜡烛、蜡烛配件和家居香氛购买网站:Yankee Candle
2018/12/12 全球购物
在线购买澳大利亚设计师手拿包和奢华晚装手袋:Olga Berg
2019/03/20 全球购物
奥地利时尚、美容、玩具和家居之家:Kastner & Öhler
2020/04/26 全球购物
小学家长学校培训材料
2014/08/24 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
python opencv通过按键采集图片源码
2021/05/20 Python
python实现简易自习室座位预约系统
2021/06/30 Python
python对文档中元素删除,替换操作
2022/04/02 Python