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

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.'">';
?>







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值