10.login

goer ... 2022-01-07 Php
  • Php
大约 4 分钟

文件上传

[toc]

# 文件上传

# 表单操作

# $_GET

所有表单输入的数据被加载到请求的URL地址后面;
如:test.php?username=free&password=123&content=dfdsfsfd;
GET方式提交数据只能传递文本,能够提交的数据量大小有限,安全性差;
1
2
3

# $_POST

POST提交数据的方式把表单的数据打包放入http请求中;
POST能够提交更多的数据;
1
2

# 接收数据

表单提交的数据会自动封装为数组;     
用$_GET, $_POST, 或$_REQUEST获得表单提交的数据;
1
2

# $_REQUEST

$_REQUEST 支持两种方式发送过来的请求,即 post 和 get 它都可以接受,显示不显示要看传递方法。
get 会显示在 url 中(有字符数限制),post 不会在 url 中显示,可以传递任意多的数据(只要服务器支持)
1
2

# 处理多值表单控件

多值表单控件(如复选框和多选框),大大提高了基于web的数据收集能力;
因为这些组件是多值的,所以表单处理函数必须能够识别一个表单变量中可能有
多个值;为了让php识别一个表单变量的多个值(即考虑为数组),需要对表单名
(元素的name属性值)增加一对中括号,如:

<input type="checkbox" name="love[]" />
1
2
3
4
5
6

提交数据,处理数据

get & post

get 提交内容 url后
    只能提交文本
	提交内容有限
    安全性差
    处理快  -- 搜索功能

post 提交内容再http协议体
    安全性比get高
    提交更多数据
    服务器要看服务器的配置 
1
2
3
4
5
6
7
8
9
10

注意

//文件上传
1. 提交方式 必须  post
2. form标签加 enctype="multipart/form-data"
    <input type="checkbox" name="love[]" />
3. 多选框name="name[]"  ==> 以数组的方式获取到数据,否则只能获取一个
4. 加判断
if($_GET){
    // 有数据则
}else{
    // 没有提交数据
}
1
2
3
4
5
6
7
8
9
10
11

文件上传 主要看 全局变量 $FILES

if($_FILES){
    
}
1
2
3

# $_FILES数组

$_FILES超级全局变量作用是存储各种与上传文件有关的信息;

$_FILES是一个二维数组,数组中共有5项:

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

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

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

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

$_FILES["userfile"]["error"]  文件上传相关的错误代码
1
2
3
4
5
6
7
8
9
10
11

# 错误信息

$_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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 上传函数

很重要 is_uploaded_file() move_uploaded_file()

is_uploaded_file(file) 函数检查指定的文件是否是通过 HTTP POST 上传的。

move_uploaded_file()作用是将上传文件从临时目录移动到目标目录; 

if(is_uploaded_file($_FILES[$file_name]['tmp_name'])){
    move_uploaded_file($_FILES[$file_name]['tmp_name'],'a')
}

//将临时文件判断是否是post  并且移动到a a是文件名
1
2
3
4
5
6
7
8
9

老师的:

// 跳转函数
/* 
    msg  提示信息
    url  跳转地址
*/
function show_msg($msg, $url = null)
{
    if (!empty($url) ) {
        echo "<script>alert('" . $msg . "');location.href='" . $url . "';</script>;";
    } else {
        echo "<script>alert('" . $msg . "');window.history.go(-1);</script>";
    }
    die;
}


//图片上传的函数
/*
$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 '
            ';
            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 '图片上传错误';
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
    include('function.php');
    if ($_FILES) { //是否提交
        $str = upload('photo');
        $arr = explode(',', $str);
        //print_r($arr);
        if ($arr[0] == '图片上传成功') { //只有上传成功了才有图片名称$arr1
            //echo $arr[1];//需要存入数据库的图片名称
            echo '<script>alert("图片上传成功 ");location.href="upload.php";</script>';
        } else { //上传失败
            echo '<script>alert("' . $arr[0] . '");location.href="upload.php";</script>';
        }
    }
?>
 <form action="" method="post" enctype="multipart/form-data">
        <input type="file" name="photo" value="" id="upload" multiple>
        <input type="submit" name="" value="上传">
    </form>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

多图上传 form表单 input:file 加 name="photo[]" multiple

循环数组,变成我们的上面的关联数组