(八)PHP文件上传+会话控制

[复制链接]
发表于 2025-11-8 15:42:16 | 显示全部楼层 |阅读模式
一,文件上传


表单部分

<form action='./xxoo.php' method='POST' enctype='multipart/form-data'>
    <input type='file' name='pic' />
    <input type='submit' value='提交' />
</form>

        1) method 必须是 POST
        2) enctype='multipart/form-data' 这一项必须有
        3) input 标签中 type='file' 必须有 name 值

        多文件上传:
        方式一:
                <input type='file' name='pic[]' />
                <input type='file' name='pic[]' />

        方式二:
                <input type='file' name='pic[]' multiple />

接收文件上传的信息
<?php
        print_r( $_FILES['pic'] ); // 接收表单传过来的 上传文件信息
?>

$_FILES[ 'pic' ] 中的具体信息
        $_FILES[ 'pic' ]['name'] 原始文件名
        $_FILES[ 'pic' ]['type'] 文件类型
        $_FILES[ 'pic' ]['tmp_name'] 上传以后的 临时文件名
        $_FILES[ 'pic' ]['error'] 错误号, 不同的错误号, 代表着不同的错误
        $_FILES[ 'pic' ]['size'] 上传文件的大小, 单位为字节


php.ini 中上传文件的一些设置

file_uploads=On   是否开启文件上传功能

upload_tmp_dir=     文件上传后的 临时存放目录

upload_max_filesize=2M  单个上传文件 最大限制

max_file_uploads=20    一次可以同时上传多少个文件

post_max_size=100M    表单提交的最大数据量


二,错误号的含义


<?php
        $error = $_FILES['pic']['error'];
        switch($error){
                        case 0: echo '上传成功'; break;
                        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 '找不到临时文件夹'; break;
                        case 7: echo '文件写入失败'; break;
        }
?>


三,判断文件类型

<?php
    $type = ['image/jpeg', 'image/png', 'image/gif'];
    if (!in_array($_FILES['pic']['type'], $type)) {
            die('上传文件的类型不符合要求');
    }
?>

四,判断文件大小

<?php
        $max_size = 4096;
        $size = $_FILES['pic']['size'];
        if ($size > $max_size) {
                die('上传文件超过要求大小');
        }
?>



五,生成一个随机文件名


<?php
        $path = './uploads/';
        $ext = pathinfo($_FILES['pic']['name'])['extension'];    // 取得上传文件的扩展名
       
        do{

                $fileName = $path.date('YmdHis').mt_rand(1000,9999).'.'.$ext;    // 拼接 目标文件名

        } while ( file_exists( $fileName ) );    // 判断目标文件是否存在, 如果存在,循环生成一个新名字
?>



六,处理文件上传的两个函数



is_uploaded_file( 临时文件名 ) 判断文件是否是通过 HTTP POST 上传的

move_uploaded_file( 临时文件名, 目标文件名 ) 将临时文件移动到指定的新位置

<?php
    $tmpName = $_FILES['pic']['tmp_name'];

    if (is_uploaded_file($tmpName)) {
            move_uploaded_file($tmpName, $fileName);
    }
?>


七,多文件上传数组变形



<?php
        foreach($_FILES['pic']['name'] as $k => $v){
                        $uploads[$k]['name']                 = $_FILES['pic']['name'][$k];
                        $uploads[$k]['type']                 = $_FILES['pic']['type'][$k];
                        $uploads[$k]['tmp_name']        = $_FILES['pic']['tmp_name'][$k];
                        $uploads[$k]['error']                 = $_FILES['pic']['error'][$k];
                        $uploads[$k]['size']                 = $_FILES['pic']['size'][$k];
        }
?>


八,文件下载


<?php
        //指定文件的响应类型
            header("Content-Type:类型");
        //执行下载文件,可以自定义文件名
        header("Content-Disposition:attachment;filename=文件名");
        // 设置下载文件的大小
        header("Content-Length:文件大小");

            //读取文件内容并输出
        readfile("要读取的文件名");  
?>


九,会话控制

允许服务器跟踪同一个客户端做出的连续的请求

cookie :服务器端给客户端的信息,让客户端进行存储

cookie的操作
1.设置cookie
格式: setcookie( 名字,值  [, 失效时间 [, 保存路径 ] ] );
        例子:
        //向客户端发送一个cookie,将变量username值为joker,保存在客户端一周的时间
        setcookie("username", "joker", time()+60*60*24*7,'/');

2.获取cookie
        $_COOKIE[ ' 名字 ' ];   (超全局数组)

3.删除cookie
格式: setcookie(名,值,当前时间-1,'/;),告诉服务器这个值已经过期,删除cookie的时候也要一个一个删除
        例子:
        //设置cookie 在当前时间过期,因此系统会自动删除识别名称为isLogin的Cookie        
         setcookie("username", "" , time()-1);



session
        存放在服务器端的全局数组_SESSION

session的原理

        客户端第一次登录网站的时候服务器会分配给它一个不重复的号码(sessionid)给客户端,客户端将sessionid放在cookie里面,在创建sessionid的同时会在服务器端创建一个文件(文件的文件名通常和sessionid一样)放在指定的目录下,当下次用户请求这个网站的页面的时候sessionid通过cookie带过来,然后在存储session文件的文件夹里面找对应的文件从里面拿值



session的使用
1、session_start( );  开启session(只有开启了session才能告诉PHP要调用session的机制)
            注意:
        1)、第一次的时候会向客户端发送session id。创建sessionid的文件
        2)、以后使用的时候,根据HTTP协议带过来的session值,找服务器里面的session文件
        3)、默认关闭浏览器就失效
2、设置session           $_SESSION["名字"] = 值;
3、获取session        $_SESSION["名字"];
4、删除session
        1)、session_start();
        2)、清空session数组unset($_SESSION);
        3)、删除session文件session_destroy();
        4)、删除客户端的sessionid,注意删除sessionid的时候路径必须加上为 /
                               setcookie(session_name(),session_id(),time()-1,'/');
                               session_name();         //获得session的名字
                               session_id();        //获得session的id         


session在php.ini中的配置

session.save_handler=files     //session的保存形式

session.cookie_lifetime=0    //session的生命周期

session.name = PHPSESSID     //设置sessionid的保存名称

session.auto_start = 0     //设置是否自动启动session

session.save_path="D:/xampp/tmp"         //session文件的保存路径


必火网络安全培训,北京实地培训,月月有开班,零基础入门,四个月打造渗透高手。
详情请加微信:nvhack/153-2000-4362,手机微信同号。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|女黑客安全网 |网站地图 | 津ICP备17008032号-3

GMT+8, 2026-2-2 05:15 , Processed in 0.078429 second(s), 24 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表