PHP文件系统之文件上传

文件的上传包括单文件上传和多文件上传

PHP配置php.ini文件

  • 开启文件上传 file_uploads=On;

  • 设置临时目录 upload_tmp_dir=;

  • 上传文件大小的限制 upload_max_size=10M

  • 上传文件的数量的限制 max_file_uploads=20;

post方式提交的最大数据限制(一般大于upload_max_filesize) post_max_size=20M;

通过表单提交的方式上传文件

1.请求方式必须是post

2.需要用到input type=file

3.设置属性 enctype="multipart/form-data"(只有文件上传时用)

添加一个隐藏的input type=hidden MAX_FILE_SIZE 值是字节数

$_POST 接受表单信息

$_FILES 接收文件信息

is_uploaded_file($filename) 检测是否是上传文件

move_uploaded_file(des) 移动文件从原路径到新路径

临时路径

/*UPLOAD_ERR_OK

其值为 0,没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL

其值为 3,文件只有部分被上传。

UPLOAD_ERR_NO_FILE

其值为 4,没有文件被上传。

UPLOAD_ERR_NO_TMP_DIR

其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。

UPLOAD_ERR_CANT_WRITE

其值为 7,文件写入失败。PHP 5.1.0 引进。

Note:

以上值在 PHP 4.3.0 之后变成了 PHP 常量。
第一种:单文件上传

HTML

文件上传:

PHP

查看post方式提交过来的$_FILES

array(1) {

["pic"]=>

array(5) {

["name"]=>

string(8) "preg.png"

["type"]=>

string(9) "image/png" MIME类型

["tmp_name"]=>

string(41) "D:\wampstack-5.6.19-0\php\tmp\phpE8DC.tmp"

["error"]=> 整型表示

int(0)

["size"]=>

int(180823)

}

}

if(isset($_FILES['pic'])){

$file_info=$_FILES['pic'];

// 第一步,错误限制

// error=0 表示没有错误 error>0 表示出错

if($file_info['error']>0){

$error_no=$file_info['error'];
 

switch ($error_no){

case UPLOAD_ERR_INI_SIZE:

echo "文件太大,超出配置范围大小";

break;

case UPLOAD_ERR_FORM_SIZE:

echo "文件太大,超出表单范围大小";

break;

case UPLOAD_ERR_PARTIAL:

echo "文件只是部分上传,没有上传完全部";

break;

case UPLOAD_ERR_NO_FILE:

echo "没有文件被上传";

break;

default:

echo "未知错误";

break;

}

exit;

}

// 第二步:大小限制

$file_size=$file_info['size'];

$max_size=5000000;

if($file_size>$max_size){

echo "文件超出最大限制";

exit;

}

// 第三步:类型限制

$file_type=$file_info['type'];

$file_type=end(explode('/',$file_type)); //end()返回数组中最后一个元素的值

// 得到类型是MIME类型 image/png image/jpg等

$mimeTypes=['png','jpeg','jpg','gif'];

if(!in_array($file_type,$mimeTypes)){

echo "类型不允许";

exit;

}

// 处理上传文件目录

$upload_dir='./upload';

if(!file_exists($upload_dir)){

mkdir($upload_dir);

}

// 处理一个唯一的文件名,可以用 时间戳+随机数

$file_name=time().mt_rand(1,999).'.'.$file_type;

// 处理完整的文件路径

$file_path=$upload_dir.DIRECTORY_SEPARATOR.$file_name;

// 处理文件

$tmp_path=$_FILES['pic']['tmp_name'];//临时路径

// 临时文件会在PHP代码执行完毕后自动清除

if(is_uploaded_file($tmp_path)){ //检测是否是上传文件

if(move_uploaded_file($tmp_path,$file_path)){ //移动原路径到新路径

echo "成功";

} else{

echo "失败";

}

}else{

echo "这不是一个上传文件";

}

}

错误代码

  • UPLOAD_ERR_INI_SIZE 常量 值:1 表示上传的文件大小超过了php.ini中设置的值upload_max_filesize

  • UPLOAD_ERR_FORM_SIZE 常量 值:2 表示上传的文件大小超过了表单中设置的MAX_FILE_SIZE

  • UPLOAD_ERR_PARTIAL 值:3 表示文件只是部分上传,没有上传完全部

  • UPLOAD_ERR_NO_FILE 值:4 表示没有文件被上传

第二种:多文件上传,将name改成数组形式的名字

多文件上传:
多文件上传:
多文件上传:
if(isset($_FILES['pic'])){

    $info=$_FILES['pic'];

    $arrs=array();

//    将数据信息按照名称分类;

    foreach ($info  as $key=>$value){

//        key:name type size error tmp_name

//        value:array(0:value1;1:value2...),array()...

        if(is_array($value)){

            $i=0;

          /* while (list($attr_key,$attr_value)=each($value)){

                $arrs[$i][$key]=$attr_value;

                $i++;

            }  与foreach等价*/

            foreach ($value as $attr_key=>$attr_value){

//                attr_key:0,1,2..

//                attr_value:val1,val2..

                $arrs[$i][$key]=$attr_value;

                $i++;

            }

        }

    }

    foreach ($arrs as $file_info){

        echo "
";

        var_dump($arrs);

        var_dump($file_info);

        echo "
"; verify_upload($file_info); } } //验证上传信息 function verify_upload($file_info){ // 第一步,错误限制 // error=0 表示没有错误 error>0 表示出错 if($file_info['error']>0){ $error_no=$file_info['error']; switch ($error_no){ case UPLOAD_ERR_INI_SIZE: echo "文件太大,超出配置范围大小
"; break; case UPLOAD_ERR_FORM_SIZE: echo "文件太大,超出表单范围大小
"; break; case UPLOAD_ERR_PARTIAL: echo "文件只是部分上传,没有上传完全部
"; break; case UPLOAD_ERR_NO_FILE: echo "没有文件被上传
"; break; default: echo "未知错误
"; break; } return; } // 第二步:大小限制 $file_size=$file_info['size']; $max_size=5000000; if($file_size>$max_size){ echo "文件超出最大限制
"; return; } // 第三步:类型限制 $file_type=$file_info['type']; $file_type=end(explode('/',$file_type)); //end()返回数组中最后一个元素的值 // 得到类型是MIME类型 image/png image/jpg等 $mimeTypes=['png','jpeg','jpg','gif']; if(!in_array($file_type,$mimeTypes)){ echo "类型不允许
"; return; } // 处理上传文件 $upload_dir='./upload'; if(!file_exists($upload_dir)){ mkdir($upload_dir); } // 处理一个唯一的文件名,可以用 时间戳+随机数 $file_name=time().mt_rand(1,999).'.'.$file_type; // 处理完整的文件路径 $file_path=$upload_dir.DIRECTORY_SEPARATOR.$file_name; // 处理文件 $tmp_path=$file_info['tmp_name'];//临时路径 // 临时文件会在PHP代码执行完毕后自动清除 if(is_uploaded_file($tmp_path)){ //检测是否是上传文件 if(move_uploaded_file($tmp_path,$file_path)){ //移动原路径到新路径 echo "成功
"; } else{ echo "失败
"; } }else{ echo "这不是一个上传文件
"; } }

你可能感兴趣的:(PHP文件系统之文件上传)