14.文件上传(小案例及解析)
来源:互联网 发布:江湖家政o2o源码下载 编辑:程序博客网 时间:2024/06/06 03:42
1、php文件上传配置
a、file_uploads=on/off; //确定服务器
b、upload_tmp_dir=string;//设置文件上传之前必须存放在服务器临时一个位置,知道文件移动到最终目的地位置。
c、max_execution_time=integer; ///PHP脚本在注册一个致命错误之前可以执行的最长时间,以s为单位;
d、memory_limit=integer; //设置脚本可以分配的最大内存,以MB为单位,可防止是空的脚本独占服务器内存。
e、update_max_filesize=integer; //设置上传文件最大大小,此指令必须小于post_max_size。
f、post_max_size=integer; //确定通过post方法可以接受的信息的最大大小,以MB为单位。
2、$_FILES数组
案例——上传表单(以上传文件为例)
步骤1:上传表单的html文件,见案例2-1:demo1.html
案例2-1(demo1.html):
<form enctype="multipart/form-data" action="demo2.php" method="post"><input type="hidden" name="MAX_FILE_SIZE" value="100000" />上传文件:<input type="file" name="userfile" /><input type="submit" value="上传" /></form>
解析:
上述代码中,(1)ENCTYPE="multipart/form-data"为固定写法,否则文件上传失败。
(2)action="upload.php",定义这里要处理上传的程序文件路径
(3)method="post",定义的传输模式为POST,一般情况下form表单提交数据都设置为POST,
(4)<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
这是一个隐藏域,且定义了上传文件的大小上限,超过该值后,将会上传失败。
(它必须定义在上传域之前,即“name="file"”),这里定义的值不能超过php.ini文件上的upload_max_filesize设置的值,否则将没有意义可言。
(5)<input type="file" name="userfile" />这是文件上传域Type属性必须设置为file,
但是Name属性可以自定义,这个值会在代码中使用。
A.$FILES为超级全局变量,
echo $FILES; //Array数组类型
它存储各种与文件上传有关的信息,信息对于通过PHP脚本上传到服务器的文件至关重要。
(1)$_FILES["userfile"]["tmp_name"]——上传文件临时存放位置
(2)$_FILES["userfile"]["name"]——上传的文件名
(3)$_FILES["userfile"]["size"]——上传文件的大小
(4)$_FILES["userfile"]["type"]——变量中的值就是文件的MIME类型
(5)$_FILES["userfile"]["error"]——与文件上传有关的错误代码
0:没有错误
1:文件size超出了约定值(upload_max_fileszie)
2:文件size超出了表单指定值(MAX_FILE_SIZE最大值)
3:只有部分上传
4:没有上传任何文件
B.上传函数——
(1)is_uploaded_file()
作用:判断文件是否按照HTTP POST方式上传
解析:由于文件会上传到临时文件中,即需要传入参数$_FILES['userfile']['tmp_name']
(2)move_uploaded_file()
作用:移动上传文件
解析:由于
参数:该函数需要传入两个参数,一个为临时文件的存储位置,另一个是要存放的地址
即($_FILES['userfile']['tmp_name'],$_FILES['userfile']['name'])
C.$_FILES几个属性在“上传文件”中的使用
(1)$_FILES['userfile']['type']的使用
if($_FILES['userfile']['type']!='image/jpeg')
(2)$_FILES['userfile']['error']使用
if($_FILES['userfile']['error']!=0)
注意:"!=0"时表示非法上传。
(3)$_FILES['userfile']['tmp_name']:临时文件地址
$_FILES['userfile']['name']:目标文件地址
注意:
若没有设置文件的编码格式,可能会出错
编码格式——
header('Content-Type:text/html;charset=GBK');
步骤2:上传表单验证是否正确的php文件,见案例2-2:demo2.php
案例2-2——demo2.php
<?php //Form表单——上传文件 //添加编码; header('Content-Type:text/html;charset=GBK'); //print_r($_FILES); //$_FILES为全局变量; //echo '<br />'; //1、判断文件是否按照http post上传 //echo is_uploaded_file($_FILES["userfile"]["tmp_name"]); //还有两个问题要验证,如果上传错误,解决办法 if($_FILES['userfile']['error']>0){ switch ($_FILES['userfile']['error']){ case 1: echo "<script>alert('上传文件超过约定值1!');history.back();</script>"; break; case 2: echo "<script>alert('上传文件超过约定值2!');history.back();</script>"; break; case 3: echo "<script>alert('部分文件被上传!');history.back();</script>"; break; case 4: echo "<script>alert('没有任何文件被上传!');history.back();</script>"; break; } exit; } //将所有的参数输出 print_r($_FILES); //第二种写法:数组array //创建一个常量; defined('MAX_SIZE',2000000); //dirname defined('URL',dirname(__FILE__).'\uploads'); //储存地址; $fileMimes=array('image/jpeg','image/pjpeg'); //判断类型是否为数组中的一种 if(is_array($fileMimes)){ if(!in_array($_FILES['userfile']['type'], $fileMimes)){ echo "<script>alert('本站只允许jpg、jpeg、png的图片');history.back();</script>"; } } //第二个问题:只能允许jpg文件 //用到$_FILES['userfile']['type'] //if($_FILES['userfile']['type']!='image/jpeg'){ // //echo "<script>alert('本站只允许jpeg文件!');history.back();</script>"; //} //第一种写法:switch-case 解决IE与火狐的兼容性问题; //switch ($_FILES['userfile']['type']){ // case 'image/jpeg'://火狐 // break; // case 'image/pjpeg'://ie // break; // case 'image/png': //火狐 // break; // case 'image/x-png': //IE // break; // case 'image/gif': //IE // break; // default:echo "<script>alert('本站只允许jpg格式图片');history.back();</script>"; // } //判断配置大小 if($_FILES['userfile']['size']>MAX_SIZE){ echo "<script>alert('上传大小不得超过2M');history.back();</script>"; exit; } //判断目录是否存在; if(!is_dir(URL)){ mkdir(URL,0777); //最大权限; } if(is_uploaded_file($_FILES['userfile']['tmp_name'])){ //echo '上传的临时文件,已找到...'; //2、move_uploaded_file() //第一个参数,写临时文件的地址,第二个参数,写上要存放的地址; //如果想屏蔽警告,加上@符号。 if (@!move_uploaded_file($_FILES['userfile']['tmp_name'],URL.'/'. $_FILES['userfile']['name'])){ echo "<script>alert('移动失败!');history.back();</script>"; exit; } } else{ echo "<script>alert('临时文件夹找不到上传的文件!')</script>"; exit; } //全部通过就是上传成功 echo "<script>alert('文件上传成功!');location.href='demo4.php?url=".$_FILES['userfile']['name']."';</script>"; ?>
步骤3:上传表单验证通过的php文件的地址显示,见案例2-3:demo3.php
案例2-3——demo3.php
<?php $url=$_GET['url']; echo '<img src="'.$url.'">';?>
- 14.文件上传(小案例及解析)
- 小案例:文件上传 和下载
- php ajax 单个文件上传案例解析
- 文件上传案例(1)
- 文件的下载详解及案例解析
- Ajax实现无刷新上传文件小案例
- Json解析小案例
- Struts2系统学习(10)文件上传与下载案例及原理分析
- JSP+Servlet实现文件上传及下载案例
- 文件上传,图片上传案例
- jsp上传文件案例(有源码)
- java-文件上传案例
- 迷你上传文件案例
- TCP文件上传案例
- 案例--文件上传总结
- 文件上传案例
- formData文件上传--案例
- 文件上传案例
- hdu2072 单词数
- Redis入门 (CentOS7 + Redis-3.2.1)
- Latex--入门系列二
- 用 _findfirst 和 _findnext 查找文件
- mvc 4 razor语法讲解和使用
- 14.文件上传(小案例及解析)
- BZOJ2310
- 几张图简单说明Node结构
- JavaScript初步学习—函数表达式
- 发布的QT程序无法显示图标和图片的问题
- 安利AutoValue第二波
- javascript脚本化CSS系列和封装兼容方法的getStyle(obj, prop)方法
- __VA_ARGS__用法
- c++ 数据结构 队列应用之电路布线