一,文件上传
表单部分
<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文件的保存路径
|