允许用户从表单上传文件是非常有用的。先来看一段HTML表单代码

<html>
<body>   <form action="upload_file.php" method="post"     enctype="multipart/form-data">     <label for="file">Filename:</label>
    <img src="getMemberAvatar.jpg" id="save_file" />
    <input type="file" name="file" id="file" accept="image/jpg, image/jpeg" />
    <br />
    <input type="submit" name="submit" value="Submit" />   </form> </body>
</html>

然后再来一段js代码,这里使用的是 jquery.js

<scrtipt type="text/javascript" src="js/jquery.min.js"></script>
<script>
$(function(){
$("#save_file").click(function(){
$("#file").click();//给id为file的元素绑定一个click事件
})
$("#pic").change(function(){
var PIC_EXT = new Array('.jpg','.jpeg','.gif','.png');
var pic = $(this).val(); })
})
</script>

知识点:

1、<form>标签中的enctype属性规定了在提交表单的时候要使用哪一种内容类型、在表单需要二进制数据时,比如文件内容,一定要使用这个属性:enctype="multipart/form-data".

2、<label>标签为input元素定义标注(标记).<label>标签中的for属性应该与相关元素id属性相同,那么当用户点击选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上。

3、允许用户上传文件存在巨大的安全风险。请仅仅允许可信任的用户执行上传文件操作,并且在服务器做相应的校验

下面是一个upload.file.php实例,其中包含了几点内容:

1、上传限制:户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb;

2、保存被上传的图片:文件被上传结束后,默认地被存储在了临时目录中,这时必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除,所以我们在上传成功的时候要把这个临时文件复制一个存到图片文件夹中

上传限制

在这个脚本中,我们增加了对文件上传的限制。用户只能上传 .gif 或 .jpeg 文件,文件大小必须小于 20 kb

 <?php
//用户只能上传 .gif 或 .jpeg 文件 文件大小必须小于 20 kb:
$type = ($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FIELS["file"]["type"] == "image/pjpeg");
$tip_msg="";
if($type && $_FILES["file"]["size"] <20000 ){
$tip_msg = $_FILES["file"]["error"] > 0 ? $_FILES["file"]["error"] : "" ;
if(empty($tip_msg)){
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"]; //存储在服务器的文件的临时副本的名称 if(file_exists("upload/".$_FILES["file"]["name"])){
echo $_FILES["file"]["name"]."already exists. ";
}else{
if(is_uploaded_file($_FILES["file"]["tmp_name"])){ //检测文件是否是通过http post方式传上来的
$stored_path = $_SERVER['document_root']."/upload/".basename($_FILES["file"]["name"]);
if(move_uploaded_file($stored_path . $_FILES["file"]["name"])){
echo "Stored in: " . $stored_path;
}else{
echo 'Stored failed:file save error';
}
} echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}else{
echo "Error:" .$_FILES["file"]["error"];
}
}else{
echo "Invalid file";
}
?>


其中 move_uploaded_file() 函数将上传的文件移动到新位置。成功返回true,失败返回false
move_uploaded_file(file,newloc)  如果目标文件已经存在,将会被覆盖
参数 描述
file 必需。规定要移动的文件。
newloc 必需。规定文件的新位置。
 
is_uploaded_file($file)

该函数可以用于确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd。


这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

原创作品,转载请注明出处!

 

php中$_FILES应用实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. [Effective JavaScript 笔记]第36条:只将实例状态存储在实例对象中

    理解原型对象与其实例之间是一对多的关系,对于实现正确的对象行为很重要.常见的错误是不小心将每个实例的数据存储到了其原型中. 示例 一个实现了树型数据结构的类可能将子节点存储在数组中. 实例状态在原型中 ...

  3. 上传文件及$_FILES的用法实例

    Session变量($_SESSION):�php的SESSION函数产生的数据,都以超全局变量的方式,存放在$_SESSION变量中.1.Session简介SESSION也称为会话期,其是存储在服务 ...

  4. iOS比较常用的第三方及实例(不断更新中)

    把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新: 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...

  5. 将oracle冷备份恢复到另外一个数据库实例中

    因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...

  6. openstack将本地实例迁移至ceph存储中

    需求: 最近在openstack上线了ceph存储,创建虚拟机和云硬盘都基于ceph卷进行存储和创建,但是之前openstack用的是本地存储,创建的所有实例都在本地文件中,当实例重启之后,opens ...

  7. PHP实例:使用PHPExcel导入Excel2003文档和Excel2007文档到MySQL数据库中

    如果要使用phpExcelReader将Excel 数据导入到mysql 数据库,请读者点击这个文章查看. 使用phpExcelReader将Excel 数据导入到mysql 数据库. 下面我们介绍另 ...

  8. MVC之在实例中的应用

    MVC模式在Java Web应用程序中的实例分析 1. 结合六个基本质量属性 1)可用性 2)可修改性 3)性能 4)安全性 5)可测试性 6)易用性 2. 分析具体功能模块的MVC设计实现(例如登录 ...

  9. 实例解说AngularJS在自动化测试中的应用

    一.什么是AngularJS ? 1.AngularJS是一组用来开发web页面的框架.模板以及数据绑定和丰富UI的组件: 2.AngularJS提供了一系列健壮的功能,以及将代码隔离成模块的方法: ...

随机推荐

  1. 【翻译】将Ext JS Grid转换为Excel表格

    原文:Converting an Ext 5 Grid to Excel Spreadsheet 稍微迟来的礼物--Ext JS Grid转为Excel代码,现在支持Ext JS 5! 功能包括: - ...

  2. SVN---搭建幸福之家

    SVN百度百科对她这样进行阐述:SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从 ...

  3. 理解WebKit和Chromium: Android 4.4 上的Chromium WebView

    转载请注明原文地址:http://blog.csdn.net/milado_nju ## 概述 相信读者已经注意到了,在最新的Android 4.4 Kitkat版本中,原本基于Android Web ...

  4. java常用集合类详解(有例子,集合类糊涂的来看!)

    Framework集合框架是一个统一的架构,用来表示和操作集合.集合框架主要是由接口,抽象类和实现类构成.接口:蓝色:实现类:红色Collection|_____Set(HashSet)|       ...

  5. Chipmunk僵尸物理对象的出现和解决(四)

    接上一篇,我们看看五角星和反弹棒碰撞时的代码: -(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair star:(CCNode * ...

  6. 下载Ext JS 5.1 gpl版本的方法

    先进入官网:http://www.sencha.com 然后在导航的Products中选择Sencha Ext JS,会看到以下页面: 这时候不要单击Download按钮,而是要单击导航中的DETAI ...

  7. Binder和SurfaceFlinger以及SystemServer介绍-android学习之旅(79)

    由于binder机制的存在,使得进程A可以访问进程B中的对象. Android系统Binder机制中的四个组件Client.Server.Service Manager和Binder驱动程序: 1. ...

  8. Leetcode_62_Unique Paths

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43404205 A robot is located at ...

  9. apache 配置详解

    三种MPM介绍                                                                               Apache 2.X  支持 ...

  10. Android监听电池状态

    监听电池状态只需要接收Intent.ACTION_BATTERY_CHANGED的广播即可,当电池状态发生变化时会发出广播. 1.运行状态如下图: (1)连接USB时的状态 (2)断开USB时的状态 ...