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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
对javascript和select部件的结合运用
Oct 09 PHP
PHP学习资料汇总与网址
Mar 16 PHP
php中cookie的作用域
Mar 27 PHP
PHP安全技术之 实现php基本安全
Sep 04 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
PHP开发注意事项总结
Feb 04 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
PHP统计当前在线用户数实例讲解
Oct 21 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 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学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
document.all与WEB标准
2020/05/13 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
javascript JSON操作入门实例
2010/04/16 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
jquery事件机制扩展插件 jquery鼠标右键事件
2011/12/21 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
详解vue项目中使用token的身份验证的简单实践
2019/03/08 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
Vue实现input宽度随文字长度自适应操作
2020/07/29 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
大二学生学习个人自我评价
2014/01/19 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
企业安全生产标语
2014/06/06 职场文书
农民工预备党员思想汇报
2014/09/14 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
举起手来观后感
2015/06/09 职场文书
爱国教育主题班会
2015/08/14 职场文书
《灰雀》教学反思
2016/02/19 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
使用springMVC所需要的pom配置
2021/09/15 Java/Android
JS实现九宫格拼图游戏
2022/06/28 Javascript