php中$_FILES应用实例
允许用户从表单上传文件是非常有用的。先来看一段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应用实例的更多相关文章
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- [Effective JavaScript 笔记]第36条:只将实例状态存储在实例对象中
理解原型对象与其实例之间是一对多的关系,对于实现正确的对象行为很重要.常见的错误是不小心将每个实例的数据存储到了其原型中. 示例 一个实现了树型数据结构的类可能将子节点存储在数组中. 实例状态在原型中 ...
- 上传文件及$_FILES的用法实例
Session变量($_SESSION):�php的SESSION函数产生的数据,都以超全局变量的方式,存放在$_SESSION变量中.1.Session简介SESSION也称为会话期,其是存储在服务 ...
- iOS比较常用的第三方及实例(不断更新中)
把平时看到或项目用到的一些插件进行整理,文章后面分享一些不错的实例,若你有其它的插件欢迎分享,不断的进行更新: 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com ...
- 将oracle冷备份恢复到另外一个数据库实例中
因更换服务器需要将Oracle数据库转移到另外台Oracle中.说明: 1.测试环境为:windows server2003 和 oracle 10g. 2.2台服务器安装的程序目录一样,数据目录不一 ...
- openstack将本地实例迁移至ceph存储中
需求: 最近在openstack上线了ceph存储,创建虚拟机和云硬盘都基于ceph卷进行存储和创建,但是之前openstack用的是本地存储,创建的所有实例都在本地文件中,当实例重启之后,opens ...
- PHP实例:使用PHPExcel导入Excel2003文档和Excel2007文档到MySQL数据库中
如果要使用phpExcelReader将Excel 数据导入到mysql 数据库,请读者点击这个文章查看. 使用phpExcelReader将Excel 数据导入到mysql 数据库. 下面我们介绍另 ...
- MVC之在实例中的应用
MVC模式在Java Web应用程序中的实例分析 1. 结合六个基本质量属性 1)可用性 2)可修改性 3)性能 4)安全性 5)可测试性 6)易用性 2. 分析具体功能模块的MVC设计实现(例如登录 ...
- 实例解说AngularJS在自动化测试中的应用
一.什么是AngularJS ? 1.AngularJS是一组用来开发web页面的框架.模板以及数据绑定和丰富UI的组件: 2.AngularJS提供了一系列健壮的功能,以及将代码隔离成模块的方法: ...
随机推荐
- MinerQueue.java 访问队列
MinerQueue.java 访问队列 package com.iteye.injavawetrust.miner; import java.util.HashSet; import java.ut ...
- [leetcode]经典算法题- String to Integer (atoi)
题目描述: 把字符串转化为整数值 原文描述: Implement atoi to convert a string to an integer. Hint: Carefully consider al ...
- UE4 创建自己的角色
首先,需要在UE4中设置自己需要输入的按键,点击工具栏的Settings/ProjectSettings,找到input,在Bindings下添加自己需要的输入按键,我这里绑定了JumpBtn.Mov ...
- MTK Android software Tools工具的说明
MTK发布的Android software Tools工具包,里面包含了很多的MTK工具,如下是简要说明及学习文档 MTK Android software Tools工具的说明如下: 工具 说明 ...
- 俺的新书《Sencha Touch实战》终于出版了
内容简介:Sencha框架是第一个基于HTML 5的移动也能给予框架,可以让Web应用看起来像网络应用.美丽的用户 界面 组件和丰富的数据管理,全部基于最新的HTML 5和CSS 3的Web标准,全部 ...
- 安卓打开File Explorer里面不显示内容
其实这不算是开发问题,是自己对这个文件的内容不了解罢了.这个文件的内容与手机是直接相关系的.只有打开模拟器才可以查看里面的内容. 打开模拟器,里面的文件一览无余.因为自己遇到了问题,还有些惊慌,但真实 ...
- Android虚拟设备访问WebSocket问题
Android虚拟设备访问WebSocket问题 最近写erlang的WebSocket网站,需要运行在RHEL6上,用Android设备访问. 可惜AVD无法访问主机 Win7上的虚拟机(RHEL6 ...
- 理解 Linux 条件变量
理解 Linux 条件变量 1 简介 当多个线程之间因为存在某种依赖关系,导致只有当某个条件存在时,才可以执行某个线程,此时条件变量(pthread_cond_t)可以派上用场.比如: 例1: 当系统 ...
- ios的位置和方向(来自苹果官方文档,仅供简单参考)
取得用户的当前位置 Core Location框架使您可以定位设备的当前位置,并将这个信息应用到程序中.该框架利用设备内置的硬件,在已有信号的基础上通过三角测量得到固定位置,然后将它报告给您的代码.在 ...
- python 内置标准库socketserver模块的思考
socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错.它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 ...