您的位置:首页 > 其它

14.文件上传(小案例及解析)

2016-12-09 19:57 190 查看
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.'">';
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息