欢迎光临
感谢一路有你

php文件上传

如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
 

$_GET和$_POST接受的是表单数据

$_FILES返回一个二维数组

第一维是表单里文件上传域name的值
第二维是有五个元素
    [name] => 文件原名
    [type] => 文件的 MIME 类型
        主类型/子类型
        image/jpeg
        image/png
        text/html
        text/plain 普通文本文件.php .txt
        application/x-rar-compressed .rar
        application/zip  .rar  .zip
        video/x-msvideo AVI文件 .avi
    [tmp_name] => 临时的文件名
    [error] =>
        0 : 就表示上传成功,没有错误发生 
        1 : 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。 
        2 : 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。 
        3 : 文件只有部分被上传。 
        4 : 没有文件被上传。 
        6 : 找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。 
        7 : 文件写入失败。PHP 5.1.0 引进。
    [size] => 文件的大小(字节)

处理上传的文件

php提供了两个函数来操作文件上传
1. is_uploaded_file($_FILES[‘tmp_name’]).
判断是否是通过POST方式上传上来的文件

  1. move_uploaded_file($_FILES[‘tmp_name’], $path).
    将上传上来的文件,移动到指定位置
    成功返回 true 失败 ,返回 false

实例

单文件上传

html

 <form action="1.php" method="post"enctype="multipart/form-data">
        <input type="hidden" name="MAX_FILE_SIZE" value="10485760">
        <input type="file" name="myfile1">
        <input type="submit" value="提交">
    </form>

php

<?php
header("content-type:text/html;charset=utf-8");
date_default_timezone_set('PRC');
//echo "<pre>";
//print_r($_FILES);die;

function uploadFile($file = "myfile",$size = 10485760,$type = array('image','text'),$uploads = "./uploads")
{
//判断表单是否为空
    if(empty($_FILES)){
        echo "请检查表单属性";
        return false;
    }
    $fileName = $_FILES[$file]['name'];//文件名
    $tmpName = $_FILES[$file]['tmp_name'];//临时存放的目录
    $fileError = $_FILES[$file]['error'];
    $fileType = $_FILES[$file]['type'];
    $fileSize = $_FILES[$file]['size'];

    if($fileError>0){
        switch($fileError){
            case 1:
                echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
                break;
            case 2:
                echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                break;
            case 3:
                echo "文件只有部分被上传";
                break;
            case 4:
                echo "没有文件被上传";
                break;
            case 6:
                echo "找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进";
                break;
            case 7:
                echo "文件写入失败。PHP 5.1.0 引进";
                break;
        }
    }
        //判断类型
        list($maintype)=explode('/',$fileType);
        if(!in_array($maintype,$type)){
            echo "文件类型错误";
            return false;
        }
        //判断大小
        if($fileSize > $size){
            echo "文件超出限制大小";
            return false;
        }
        $ext = pathinfo($fileName,PATHINFO_EXTENSION);//类型
        $saveName = date('Ymd').uniqid().mt_rand(1,100).'.'.$ext;
        //生成保存路径
        $path = rtrim($uploads,'/')."/".date('Y/m/d');
        if(!file_exists($path)){
            mkdir($path,0777,true);
        }
        $saveFile = $path .$saveName;
        if(move_uploaded_file($tmpName,$saveFile)){
            echo "上传成功";
            return $saveFile;
        }else{
            echo "上传失败啊";
            return false;
        }
}
echo uploadFile('myfile1');

多文件上传

1

html

<form action="1.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" VALUE="10485760">
    <input type="file" name="myfile1"  ><br>
    <input type="file" name="myfile2"  ><br>
    <input type="file" name="myfile3"  ><br>
    <input type="submit" value="提交"><br>
</form>

php

<?php
header("content-type:text/html;charset=utf-8");
date_default_timezone_set('PRC');
//echo "<pre>";
//print_r($_FILES);die;
foreach($_FILES as $key=>$value){
    uploadFile($key);
}
function uploadFile($file,$size=10485760,$type = array('image','text'),$uplads = './uploads')
{
if(empty($_FILES)){
    echo "表单错误";
    return false;
}
    $fileName = $_FILES[$file]['name'];//名
    $tmpName = $_FILES[$file]['tmp_name'];//临时存放位置
    $fileType = $_FILES[$file]['type'];//类型
    $fileSize = $_FILES[$file]['size'];//大小
    $fileError = $_FILES[$file]['error'];//错误码

    if($fileError>0){
        switch($fileError){
            case 1:
                echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
                break;
            case 2:
                echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
                break;
            case 3:
                echo "文件只有部分被上传";
                break;
            case 4:
                echo "没有文件被上传";
                break;
            case 5:
                echo "找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进";
                break;
        }
    }
    //文件类型
    list($maintype)=explode('/',$fileType);
    //判断是否有该类型
    if(!in_array($maintype,$type)){
        echo "类型错误";
        return false;
    }
    //判断大小
    if($fileSize>$size){
        echo "超出最大上传大小";
        return false;
    }
    $ext = pathinfo($fileName,PATHINFO_EXTENSION);//获取文件类型
    //合成名字
    $saveName = date('Ymd').uniqid().mt_rand(1,100).'.'.$ext;
//    路径
    $path = rtrim($uplads,'/').'/'.date('Y/m/d');
    if(!file_exists($path)){
        mkdir($path,0777,true);
    }
    $saveFile = $path.$saveName;//拼接路径名字
if(move_uploaded_file($tmpName,$saveFile)){
    echo "上传成功";
    return $saveFile;
}else{
    echo "上传失败";
    return false;
}

}

2

html

<form action="1.php" method="post" enctype="multipart/form-data">
    <input type="file" name="myfile[]"multiple="multiple" >
    <input type="submit" value="提交">
</form>

php1

单文件上传的php文件

php2

<?php
require_once ('./uploads.php');

$len = count($_FILES['myfile']['name']);
for($a = 0;$a<$len;$a++){
    foreach($_FILES['myfile'] as $key =>$value){
        $_FILES['myfile'.$a][$key] = $value[$a];
    }
}

unset($_FILES['myfile']);

foreach ($_FILES as $i => $item) {
    $names[] = uploadFile($i);
}

echo "<pre>";
print_r($names);

foreach ($names as $i => $item) {
    echo "<img src='$item' width='200'>"."<br>";
}

函数积累

in_array(找的量,大量)判断是否存在
in_array($maintype,$type)
赞(2) 打赏
未经允许不得转载:王明昌博客 » php文件上传
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏