[TOC]
1.Cookie
Cookie 和 session 是两种不同的存储机制。cookie 是从一个外部页面到下一个页面的数据传递的方法,它一般是存储在客户端的。Session 是让数据在页面当中具有持续有效的一个方法。他一般是存储在服务器端。
1.1 什么是 cookie
Cookie 是一种在客户浏览器端存储数据,并且以此来去跟踪和识别用户的一种机制。简单的说呢,cookie 是 Web 服务器暂时存储在用户的硬盘上的一个文本文件。
web 服务器可以通过 Cookie 包含的信息来筛选或维护这些信息。用来判断 HTTP 传输的状态。
1.2 创建 cookie
在 PHP 中通过 setcookie()函数创建 Cookie,在创建 Cookie 之前,要了解 Cookie 是 HTTP 头标的组成部分。
bool setcookie(string name[,string value[,int expire[,string path[,string domain[,int secure]]]]]);
参数 | 说明 |
---|---|
name | Cookie 的变量名 |
value | Cookie 变量的值,存储在客户端,不能保存敏感信息 |
expire | Cookie 的失效时间,expire 是标准的 UNIX 时间标记,可以用 time()函数或 mktime()函数获取。 |
path | Cookie 在服务器端的有效路径 |
domain | Cookie 有效的域名 |
secure | Cookie 是否仅通过安全的 HTTPS,值 0,1(如果值为 1.则 cookie 只能在 HTTPS 连接上有效。如果为 0,则 cookie 在 HTTP 和 HTTPS 连接上均有效) |
<?php
setcookie('un','huskyuncle');
setcookie('pw','123456',time()+60);//设置Cookie有效时间为60秒
?>
1.3 读取 cookie
通过超全局变量数组$_COOKIE[]来读取浏览器端的 Cookie 值
$un=$_COOKIE['un'];
$pw=$_COOKIE['pw'];
if(!isset($_COOKIE['visittime'])){
setcookie('visittime',date('y-m-d H:i:s'));
echo '欢迎第一次访问网站';
}else{
setcookie('visittime',date('y-m-d H:i:s'),time()+5);
echo "您上次访问的时间为:".$_COOKIE['visittime'];
echo '<br>';
}
echo '您本次访问的是时间'.date('y-m-d H:i:s');
<table> <tr><td bgColor="orange"><strong>注: 如果未设置Cookie的失效时间,则在关闭浏览器是自动删除Cookie数据,如果设置了失效时间,浏览器会记住Cookie数据,即使重启计算机,只要时间不到,都依然有效。</strong></td></tr></table>
1.4 删除 cookie
1.使用 setcookie()函数删除 Cookie
setcookie('un','',time()-1);
2.在浏览器中手动删除
1.5 Cookie 的生命周期
如果 Cookie 不设定失效时间,就表示它的生命周期,就为浏览器会话的期间的这个时间。只要关闭浏览器,Cookie 就会自动消失。这种 cookie 被称之为叫会话 cookie。一般情况下,啊,不存在硬盘上的,而是保存在这个内存里边。好了我把
如果设置失效时间,浏览器会把 cookie 保存到硬盘上,再次打开浏览器的时候,依然会有效,只要时间未过期,就一直有效。直到到达有效时间。
还有一点啊,虽然呢,cookie 可以长期保存在客户端的浏览器当中。因为浏览器最多允许存储 300 个 cookie 文件。而且每一个 Cookie 文件支持最大容量只有 4kb。每一个域名最多只支持 20 个 cookie。如果达到限制,浏览器会自动随机的删除 cookie 文件。
2. Session
2.1 什么是 session
Session 在翻译的时候呢也翻译为“会话”。他原本的意思就是指,有始有终的一系列的动作或者消息。比如你打电话的时候从拿起电话拨电话号码一直到挂断电话这一系列的过程就可以称之为一个 Session。
启动一个 session 会话时,会生成一个随机且唯一的 session_id。也就是 session 的文件名。session_id 存储在服务器的内存中。当你关闭页面的时候,这个 id 会自动注销。重新再登录这个页面的时候呢,会再次生成一个随机且唯一的 id。
2.2 创建 session 会话
创建一个会话需要的步骤
启动会话->注册会话->使用会话->删除会话
1.启动会话 注册会话
启动 PHP 会话的方式有两种方式:1、使用 session_start()函数,2.使用 session_register()函数为会话创建一个变量来隐含的启动会话
session_start();
$_SESSION['username']='huskyuncle'
2.使用会话
$_SESSION['username'];
3.删除会话 1.删除单个
unset($_SESSION['username']);
2.删除多个
$_SESSION['username']=array();
3.结束当前会话
session_destroy();
2.3 Session 设置时间
1.session_set_cookie_params() 设置 session 的失效时间,这个函数是 Session 结合 Cookie 设置失效时间。
$time=1*60;//设置Session的失效时间
session_set_cookie_params($time);
session_start();
$_SESSION['username']='huskyuncle';
此函数在一些浏览器上会出现问题。所以一般建议手动设置。
2.使用 setcookie()可以设置 Session 的失效时间,
session_start();
$time=1*10;
setcookie(session_name(),session_id(),time()+$time,'/');
$_SESSION['user']='huskyuncle';
3 图形图像的处理
3.1 创建一个图像
使用 GD2 函数库可以实现对各种图形图像的处理,先使用 GD2 函数库来创建画布。通过 imagecreate()实现.
<?php
header('content-type:image/gif');//定义输出的图像类型
$img=imagecreate(200,100);// 创建一个画布
imagecolorallocate($img,255,0,0);//设置图像的背景颜色
imagegif($img);//输出图像
?>
3.2 在图片上添加文字
使用 imageTTFText()函数将文字以 TTF 字体输出在图像中。 1.使用 header()函数定义输出的图像类型。
2.imagecreatefromjpeg()函数载入图片。
3.imagecolorallocate()函数设置输出字体颜色。 4.定义输出的中文字符串所使用的字体。 5.通过 iconv()函数对输出的中文字符串的编码格式进行转换。 6.使用 imageTTFText()函数向图片中添加文字。 7.创建图像,释放资源。
header('content-type:image/jpeg');
$img=imagecreatefromjpeg('imgs/timg.jpeg');
$textcolor=imagecolorallocate($img,255,0,0);
$font = 'arial.ttf';
$text=iconv('gb2312','utf-8',"Hello Word");
imageTTFText($img,200,0,500,300,$textcolor,$font,$text);
imagejpeg($img);
imagedestroy($img);
4 文件处理
文件处理包括读取、关闭、重写等。
4.1 打开/关闭文件
打开/关闭文件使用 fopen()函数和 fclose()函数。(千万小心,别误删了文件)
1.打开文件/关闭文件
resource fopen(string filename,string mode[,bool user_include_path]);
mode | 模式名称 | 描述 |
---|---|---|
r | 只读 | - |
r+ | 读写 | - |
w | 只写(覆盖写入) | - |
w+ | 读写 | - |
a | 追加 | 追加模式打开文件,如果该文件已有内容,则从文件末尾开始追加内容,如果该文件不存在,会创建文件 |
$fres=fopen('testFolder/test1.txt','r');//以指定模式打开文件
// 对文件进行操作
fclose($fres);//操作完成后关闭文件
4.2 读写文件
1.从文件中读取数据
- fread()函数 按照字符串长度读取文件
$fres=fopen('testFolder/test1.txt','r');
$str=fread($fres,10);
echo $str;
- fgets()函数 按行读取文件
// 打开文件资源
$fres=fopen('testFolder/test1.txt','r');
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
// echo fgets($fres).'<hr>';
while($str=fgets($fres)){
echo $str;
}
fclose($fres);
- file() 函数 不需要调用 fopen 函数
$a=file('./testFolder/test1.txt');
// 数组 每行的内容是数组的元素
var_dump($a);
- file_get_contents() 函数 不需要调用 fopen 函数
$a=file_get_contents('./testFolder/test1.txt');
var_dump($a);
2.文件写入
- fwrite();
$resource=fopen('./testFolder/test1.txt','w');
// 写入内容
$res=fwrite($resource,'湖水库鱼cn饿了阿萨德解放军;啊');
var_dump($res);
fclose($resource);
- file_put_contents() 覆盖写入
// 最常见的 写入(覆盖写入)
$res=file_put_contents('./testFolder/test2.txt',date('y-m-d H:i:s'));
echo $res;
4.3 操作文件
php 除了可以对文件进行读写之外,对文件本身同样也可以进行操作。比如说复制重命名,查看修改日期,等等都可以。
函数 | 说明 | 举例 |
---|---|---|
php bool copy(string path1,string path2) |
将文件从 path1 复制到 path2,成功 true,失败 false | copy('test.txt','./../demo/new.txt') |
php bool rename(string filename1,string filename2) |
把 filename1 重命名为 filename2 | rename('./1.txt','./2.txt') |
php bool unlink(string filename) |
删除文件,成功 true,失败 false | unlink('1.txt') |
php fileatime(string filename) |
返回文件最后一次被访问的时间 | fileatime('1.txt') |
php array pathinfo(string name[,int options]) |
返回一个数组,包含文件 name 的路径信息,有 dirname,basename,extension,filename,设置要返回的信息,有 PATHINFO_DIRNAME,PATHINFO_BASENAME,PATHINFO_EXTENSION | |
php file_exists(string filename) |
判断文件是否存在 | |
php is_file(string filename) |
判断文件是否存在 |
5.目录处理
5.1 打开/关闭目录
1.打开目录
使用 opendir()函数打开目录
resource opendir(string path);
2.关闭目录
使用 closedir()函数关闭目录
closedir(resource $res);
5.2 浏览目录
1.使用 scandir()函数
array scandir(string directory[,int string_order])
$path='./../../02核心技术';
$res=scandir($path);
echo json_encode($res);
2.readdir() 函数
$resource=opendir('./');
while($res=readdir($resource)){
echo $res.'<br>';
}
5.3 操作目录
函数 | 说明 | 举例 |
---|---|---|
bool mkdir(string pathname) | 新建一个指定的目录 | mkdir('temp'); |
bool rmdir(string pathname) | 删除所指定的目录,该目录必须是空的 | rmdir('temp'); |
string getcwd() | 取得当前工作的目录 | |
bool rename(oldpath,newpath) | 修改目录 | |
fileatime(path) | 返回修改时间 | |
filectime(path) | 返回创建时间 | |
bool is_dir(path) | 判定path是否是目录 | |
bool is_file(path) | 判定path是否是文件 |
// 创建目录
$path = './temp';
if (file_exists($path)) {
echo '目录已经存在';
} else {
$res = mkdir('./temp');
var_dump($res);
}
// 删除空目录
$res=rmdir($path);
var_dump($res);
// 删除非空目录
function delNotEmpDir($path)
{
if(file_exists($path)){
// 给一个指定的目录 浏览目录
$dirArr = scandir($path);
// 遍历目录 挨个操作
foreach ($dirArr as $val) {
// 不处理 . 和..两个目录
if ($val == '.' || $val == '..') {
} else {
// 开始处理 只处理文件 不处理目录(因为目录不为空)
// 先判断是否是目录
$tmpPath = $path . '/' . $val;
if (is_dir($tmpPath)) {
delNotEmpDir($tmpPath);
} else {
unlink($tmpPath);
}
}
}
rmdir($path);
}else{
echo '目录不存在';
}
}
5.4 修改目录权限
chmod($pathname,权限);
位数 | 说明 |
---|---|
第一个数字 | 永远不变的 0 |
第二个数字 | 当前用户的权限 |
第三个数字 | admin和当前的用户和用户组使用权限 |
第四个数字 | 表示所有人的使用权限 |
权限分别使用3个值:
值 | 说明 |
---|---|
1 | 执行权限 |
2 | 写入权限 |
4 | 读取权限 |
6. 文件上传
要想去顺利地实现这个上传功能,我们要在php.ini这个文件里面去修改它的配置.
- file_uploads: 如果值为true,说明服务器支持上传,如果为off,则不支持
- upload_tmp_dir:上传文件临时目录,文件被成功上传之前,文件首先存放到临时目录中的。
- upload_max_filesize: 服务器允许上传的文件的最大值,以MB为单位
- max_execution_time:PHP中一个指令所能执行的最长时间,单位 秒
- memory_limit: PHP中一个指令所分配的内存空间。MB
6.1 预定义变量$_FILES
$_FILES变量它存储的是上传文件的相关信息。对于我们去完成上传文件的这个功能提供一些参数信息。
属性名 | 说明 |
---|---|
$_FILES[filename][name] | 上传的文件的 文件名 |
$_FILES[filename][size] | 上传的文件的大小,单位是字节 |
$_FILES[filename][tmp_name] | 文件上传时,首先在临时目录中被保存成一个临时文件 |
$_FILES[filename][type] | 文件的类型 |
$_FILES[filename][error] | 上传文件的结果。如果值为0,上传成功 |
先在a.html 页面完成表单元素的创建,使用<input type="file">元素提供上传文件的入口。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="./upload.php" method="POST" enctype="multipart/form-data">
<input type="file" name="upload_file">
<input type="submit" value="提交">
</form>
</body>
</html>
6.2 文件上传函数
move_uploaded_file(string filename,string destinationnpath)函数上传文件存储到指定的位置。
创建upload.php 文件用来处理客户端上传过来的文件的信息,包括文件的存储。
// 判断是否有上传文件
if(!empty($_FILES['upload_file']['name'])){
if($_FILES['upload_file']['type']=="image/png"){
$newpath=time().'.png';
}
$res=move_uploaded_file($_FILES['upload_file']['tmp_name'],'./uploads/'.$newpath);
echo '上传成功';
}