允许用户从表单上传文件是非常有用的。先来看一段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. Mybatis逻辑分页原理解析RowBounds

    Mybatis提供了一个简单的逻辑分页使用类RowBounds(物理分页当然就是我们在sql语句中指定limit和offset值),在DefaultSqlSession提供的某些查询接口中我们可以看到 ...

  2. VB.NET版机房收费系统---外观层如何写

    外观设计模式,<大话设计模式>第103页详细讲解,不记得这块知识的小伙伴可以翻阅翻阅,看过设计模式,敲过书上的例子,只是学习的第一步,接着,如果在我们的项目中灵活应用,把设计模式用出花儿来 ...

  3. FSM之SMC使用总结

    FSM之SMC使用总结 Part1: Smc.jar state machine compiler usage Reference:     http://smc.sourceforge.net/   ...

  4. Swift基础之UITabBarController(这是在之前UITableView中直接添加的)

    这些基础内容基本已经可以搭建项目框架,剩下的就是一些优化,细节和数据请求问题,慢慢更新.... 在AppDelegate中创建方法 //创建方法执行UITabBarController func cr ...

  5. [Python]Flask构建网站分析应用

    原文Saturday morning hacks: Building an Analytics App with Flask - 由orangleliu友情翻译 ,主要是通过埋点技术来实现web网页的 ...

  6. React Native之携程Moles框架

    因为支持用javascript开发原生应用,React Native一推出就受到不少公司热捧,各家都跃跃欲试.但有一个痛点是,在移动端,我们是否有必要开发多套程序:iOS.Android和H5?本次将 ...

  7. Salesforce开发入门

    云计算风起云涌,已成势不可挡之势.公司好多项目都依托于云平台了,网络安全采用了zscaler,人力资源系统用的workday,我们case系统也用了salesforce,我自己也在用运行于Google ...

  8. Android中处理大图片时图片压缩

    1.BitmapFactory.Options中的属性 在进行图片压缩时,是通过设置BitmapFactory.Options的一些值来改变图片的属性的,下面我们来看看BitmapFactory.Op ...

  9. 通过服务修改widgetUI

    public static void updateAppWidget(Context context, String displayMsg) { AppWidgetManager appWidgetM ...

  10. "《算法导论》之‘字符串’":字符串匹配

    本文主要叙述用于字符串匹配的KMP算法. 阮一峰的博文“字符串匹配的KMP算法"将该算法讲述得非常形象,可参考之. 字符串‘部分匹配值’计算 KMP算法重要的一步在于部分匹配值的计算.模仿& ...