文件上传

文件上传的相关配置

表单设置
    要进行文件的上传,需要对form表单进行特殊设置;
    1.设定表单数据的提交方式为POST
    2.设定enctype属性值为: multipart/form-data
    3.为了避免用户等待许久之后才发现上传文件太大,可以在表单中添加
      MAX_FILE_SIZE隐藏域,通过设置其value值可以限制上传文件的大小;

PHP设置

1.file_uploads
      是否允许通过HTTP上传文件,默认为ON

2.upload_max_filesize
      允许上传文件大小的最大值,默认为2M,此指令必须小于post_max_size;

3.upload_tmp_dir
      指定上传文件的临时存放路径,这个目录对于拥有此服务器进程的用户必须是可写的;
      如果未指定则使用系统默认值;

4.post_max_size
      控制POST方式提交数据php所能够接收的最大数据量;

5.memory_limit
      指定单个脚本程序可以使用的最大内存容量;

6.max_execution_time
      此指令确定php脚本可以执行的最长时间,以秒为单位,默认为30秒;

$_FILES 数组

$_FILES超级全局变量作用是存储各种与上传文件有关的信息;
$_FILES是一个二维数组,数组中共有5项:

$_FILES["userfile"]["name"] 上传文件的名称

$_FILES["userfile"]["type"]   上传文件的类型

$_FILES["userfile"]["size"]   上传文件的大小, 以字节为单位

$_FILES["userfile"]["tmp_name"] 文件上传后在服务器端储存的临时文件名

$_FILES["userfile"]["error"]  文件上传相关的错误代码

注:userfile只是一个占位符,代表文件上传表单元素的名字; 因此这个值将根据你所给定的名称有所不同;

上传错误信息

$_FILES['userfile']['error']  提供了在文件上传过程中出现的错误:

1.UPLOAD_ERR_OK (value = 0)    
  如果文件上传成功返回0;

2.UPLOAD_ERR_INI_SIZE (value = 1)
  如果试图上传的文件大小超出了 upload_max_filesize指令指定的值,则返回1;

3.UPLOAD_ERR_FORM_SIZE (value = 2)
  如果试图上传的文件大小超出了MAX_FILE_SIZE指令(可能嵌入在HTML表单中)指定的值,则返回2;

4.UPLOAD_ERR_PARTIAL (value = 3)
  如果文件没有完全上传,则返回3; 如网络出现错误,导致上传过程中断;

5.UPLOAD_ERR_NO_FILE (value = 4)
  如果用户没有指定上传的文件就提交表单,则返回4

文件上传函数

is_uploaded_file()  move_uploaded_file()

is_uploaded_file

参数 描述
file 必需。规定要检查的文件。
is_uploaded_file(file) 函数检查指定的文件是否是通过 HTTP POST 上传的。

if(is_uploaded_file($_FILES['userfile']['tmp_name'])){
  copy($_FILES['userfile']['tmp_name'], "test.txt");
}else{
  echo "文件上传失败!";
}

move_uploaded_file

参数 描述
file 必需。规定要移动的文件。
newloc 必需。规定文件的新位置。
move_uploaded_file()作用是将上传文件从临时目录移动到目标目录; 
虽然copy()也可以实现同样功能,
但move_uploaded_file()还提供了一种额外的功能,
它将检查由filename输入参数指定的文件确实是通过http post 上传机制上传的。
如果所指定的文件并非上传文件,则移动失败,返回false;

move_uploaded_file($_FILES['userfile']['tmp_name'], "1/test.jpg");

图片上传

function.php
<?php
/*1,通过$_FILES 接收表单上传的图片元素
2,通过$_FILES['input_name']['error']; 判断文件是否上传到服务器
3,定义新的文件名称
4,通过is_uploaded_file函数  判断$_FILES['input_name']['tmp_name'] 是否是通过http post方式上传的
5,然后使用move_uploaded_file($_FILES['input_name']['tmp_name'],'./images/1.jpg');
函数移动图片到指定目录
*/
//图片上传的函数
/*
$name,input框的name值
$type,上传图片的类型
$size,上传图片的大小
$upload,上传的图片保存的目录
*/
function upload($name, $type = array('jpg', 'jpeg', 'png', 'gif'), $size = 1048576, $upload = 'upload')
{
    //1、判断错误值
    $error = $_FILES[$name]['error'];
    switch ($error) {
        case 1:
            return '上传大小不能超过upload_max_filesize设置的值';
            break;
        case 2:
            return '上传大小不能超过MAX_FILE_SIZE设置的值';
            break;
        case 3:
            return '图片上传不完整';
            break;
        case 4:
            return '没有选择图片';
            break;
    }
    //2、判断文件的类型
    $pre = pathinfo($_FILES[$name]['name'], PATHINFO_EXTENSION);
    if (!in_array($pre, $type)) { //后缀没有在$type里面出现
        return '上传的图片类型错误';
    }
    //3、再次限制图片大小
    $s = $_FILES[$name]['size'];
    if ($s > $size) {
        return '图片过大,请压缩后上传';
    }
    //4、保存图片
    //首先设置好保存之后图片的名称
    $file = date('YmdHis', time()) . mt_rand(1000, 9999) . mt_rand(1000, 9999) . '.' . $pre;
    if (is_uploaded_file($_FILES[$name]['tmp_name'])) {
        //先判断图片有没有上传到服务器的临时文件夹
        move_uploaded_file($_FILES[$name]['tmp_name'], $upload . '/' . $file);
        return '图片上传成功,' . $file;
    } else {
        return '图片上传错误';
    }
}
?>
powered by GitbookEdit Time: 2024-06-06 18:25:41