允许用户从表单上传文件是非常有用的。先来看一段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. Unity插件 - MeshEditor(一) 3D线段作画 & 模型网格编辑器

    之前,因为工作需要,项目中需要动态生成很多的电线,不能事先让模型做好,更不能用LineRenderer之类的,因为画出来没有3D的效果,最主要是拐角的时候还容易破面,而我们要的是真真实实纯3D的电线, ...

  2. 关于jQuery中的trigger和triggerHandler方法的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. 跨平台移动APP开发进阶(四)AngularJS简介

    AngularJS 是一个为动态WEB应用设计的结构框架.它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚.简洁地构建你的应用组件. 它的创新点在于,利用 数据绑定 和 依赖注入 ...

  4. Java关键字之this

    this的作用: 1) this是当前对象的一个引用,便于对当前对象参数的使用: 2)可以返回对象的自己这个类的引用,同时还可以在一个构造函数当中调用另一个构造函数 this示例: public cl ...

  5. MacBook 最近发现的一些问题和技巧

    本猫的mba最近键盘莫名会失灵,但用鼠标切换其他用户时时好的,切换回来又不行,体现如下: 1.Spotlight里可以输入,其他不可以 2.cmd+tab可以切换进程 现在只有重启后才可以恢复. 网上 ...

  6. Leetcode_128_Longest Consecutive Sequence

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43854597 Given an unsorted arra ...

  7. 【一天一道LeetCode】#6 ZigZag Conversion

    一天一道LeetCode系列 (一)题目 The string "PAYPALISHIRING" is written in a zigzag pattern on a given ...

  8. CentOS 6.5安装MongoDB 2.6(多yum数据源)

    下面我们在CentOS 6.5 x64系统上安装最新的MongoDB 2.6.5版. 在MongoDB v2.6.5版的软件仓库一共有五个包: 1)mongodb-org此包是元数据包,它可以实现自动 ...

  9. 【48】java抽象类和接口的定义和区别

    首先看看他们的区别: 接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力. ...

  10. Android源代码目录组成介绍-android学习之旅(97)

    android的主要源代码组成如下: Kernel:Android Linux 内核2.6 bionic:Android 标准C运行支持库 bootloader:内核加载器参考 build:Andro ...