一. Cookie操作
1.Cookie
Cookie 是一种在客户端存储数据并用这些数据来跟踪和识别用户的机制。
Cookie 在 Web 服务器端产生,并以文本文件的形式存储在了客户端电脑的硬盘上。
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成
Cookie的作用:
HTTP协议本身是无状态的。
什么是无状态呢,即服务器无法判断用户身份。
Cookie实际上是一小段的文本信息(key-value格式)。
客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。
客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。
服务器检查该Cookie,以此来辨认用户状态。
打个比方,我们去银行办理储蓄业务,第一次给你办了张银行卡,里面存放了身份证、密码、手机等个人信息。当你下次再来这个银行时,银行机器能识别你的卡,从而能够直接办理业务。
Cookie 通常用于以下几个方面:
1)记录用户信息,如上次登陆的用户名等。
2)页面之间传递参数。
3)将HTML页面存储在 Cookie 中,提高页面浏览速度。
4)实现记录用户个人信息的功能
注意:
Cookie是不可以跨域名的,隐私安全机制禁止网站非法获取其他网站的Cookie。
比如: 淘宝的 cookie 信息, 京东是不能使用的,也不允许获取.
2. 设置Cookie信息 setcookie()
setcookie(string $name, string $value = "", array $options = []): bool
setcookie() 定义了 Cookie,会和剩下的 HTTP 头一起发送给客户端。 和其他 HTTP 头一样,必须在脚本产生任意输出之前发送 Cookie(由于协议的限制)。 请在产生任何输出之前(包括 和 或者空格)调用本函数。
一旦设置 Cookie 后,下次打开页面时可以使用 $_COOKIE 读取。 Cookie 值同样也存在于 $_REQUEST。
常见创建 Cookie 的语法格式,有以下两种:
创建 Cookie 语法格式一:
bool setcookie(名称 , 值)
注意:Cookie 会在会话结束(浏览器整体关闭)时失效。
header("content-type:text/html;charset=utf-8");
// 设置多个Cookie 信息
setcookie("username","tom");
setcookie("passwd","123");
setcookie("address","beijing");
echo "设置Cookie成功";
查看 Cookie 信息,可以在浏览器地址栏前面的 叹号中查看
创建 Cookie 语法格式二:
bool setcookie(名称 , 值 , 有效期)
注意:Cookie 会在有效期过后失效。
header("content-type:text/html;charset=utf-8");
// 设置多个Cookie 信息
setcookie("username","tom", time()+60);
setcookie("passwd","123", time()+60);
setcookie("address","beijing", time()+60);
echo "设置Cookie成功";
3. 获取 Cookie信息 $_COOKIE
通过 HTTP Cookies 方式传递给当前脚本的变量的数组。用法和 $_GET, $_POST 等全局变法相同.
$username = $_COOKIE["username"];
$passwd = $_COOKIE["passwd"];
$address = $_COOKIE["address"];
echo "Cookie 信息如下 :<br>";
echo "username:" . $username . "<br>";
echo "passwd:" . $passwd . "<br>";
echo "address:" . $address . "<br>";
4. 删除 Cookie 信息
setcookie("userName","");
通过 setcookie() 函数,将名称为 “userName” 的 Cookie 值删除。
二. 文件读写操作
1 .文件操作
在 PHP 中,提供了一系列的系统函数,用于读写文本文件的内容。
2. 文件打开 fopen()
fopen(
string $filename,
string $mode,
bool $use_include_path = false,
resource $context = ?
): resource
fopen() 将 filename
指定的名字资源绑定到一个流上,打开文件或者 URL。
- 参数一 filename
要打开的文件名,以字符串方式指定 ,可以是绝对路径 ,也可以是相对路径 . 参数二 mode
mode
参数指定了所要求到该流的访问类型。可以是以下值:
|mode
| 说明 | | —- | —- | |'r'
| 只读方式打开,将文件指针指向文件头。read | |'r+'
| 读写方式打开,将文件指针指向文件头。 read+ | |'w'
| 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。write | |'w+'
| 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 | |'a'
| 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 Append | |'a+'
| 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |示例:
$file = fopen('test.txt', "r");
3. 文件关闭 fclose()
fclose(resource $handle): bool
关闭一个已打开的文件指针,成功时返回 **true**
, 或者在失败时返回 **false**
。
在文件操作中,关闭文件操作虽然看不到明显的效果,但是一定要关闭,否则可能会产生内存泄露.
fcolse($file);
4. 读取一个字符 fgetc()
从文件句柄中获取一个字符,也就是读取一个字节。
返回一个包含有一个字符的字符串,该字符从 handle
指向的文件中得到。 碰到 EOF 则返回 **false**
。
fgetc(resource $handle): string
$file = fopen("test.txt", "w+");
// 如果是英文,一次读取一个字符
// 如果是中文 ,UTF8 编码,需要读取三次才能拼接成一个汉字, GBK 需要读取两次
// 注意,中文时,每次都要读取完马上输出,可以拼接成汉字后,即会显示
$content = fgetc($file); //get_file_character
echo $content;
$content = fgetc($file);
echo $content;
$content = fgetc($file);
echo $content;
- 练习: 读取文件中所有内容
<?php
$file = fopen("test.txt", "r");
do{
$content = fgetc($file);
echo $content;
// 判断读取的内容是不是空字符串,如果是空串,表示已经读取到文件最后
// }while($content != "");
}while($content);
fclose($file);
?>
5. 文件结束判断 feof()
feof(resource $handle): bool
feof — 测试文件指针是否到了文件结束的位置
如果文件指针到了 EOF 或者出错时则返回 **true**
,否则返回一个错误(包括 socket 超时),其它情况则返回 **false**
。
上面的练习可以改为:
<?php
$file = fopen("test.txt", "r");
do{
$content = fgetc($file);
echo $content;
// 判断 文件 是否结束,如果结束就跳出循环,否则继续读取
}while(!feof($file));
fclose($file);
?>
6. 读取一行内容 fgets()
fgets(resource $handle, int $length = ?): string
fgets — 从文件指针中读取一行
从 handle 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。
碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。
如果没有指定 length,则默认为 1K,或者说 1024 字节。
<?php
$file = fopen("test.txt", "r");
do{
// 一次读取一行,默认是 1024字节
$content = fgets($file);
// 指定读取 字节数
// $content = fgets($file,5);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
7. 读取一行内容,并过滤 HTML 标记 fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): string
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
allowable_tags
可以用可选的第三个参数指定哪些标记不被去掉。
<?php
$file = fopen("https://www.baidu.com", "r");
do{
// 一次读取一行,默认是 1024字节
$content = fgetss($file);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
8. 读取指定大小内容 fread()
fread(resource $handle, int $length): string
fread — 读取文件(可安全用于二进制文件)
fread() 从文件指针 handle
读取最多 length
个字节。 该函数在遇上以下几种情况时停止读取文件:
- 读取了
length
个字节 - 到达了文件末尾(EOF)
<?php
$file = fopen("test.txt", "r");
do{
// 一次读取文件中的10个字节
$content = fread($file, 10);
echo $content . "<br>";
}while(!feof($file));
fclose($file);
?>
9. 获取文件大小 filesize()
filesize(string $filename): int
filesize — 取得文件大小,返回文件大小的字节数
注意一: 参数是测试文件的路径
注意二: 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果。
<?php
// test.txt: 1024 bytes
$filename = 'test.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>
<?php
$file = fopen("test.txt", "r");
// 获取文件大小,一次性读取出来
$content = fread($file, filesize("test.txt"));
echo $content;
fclose($file);
?>
10. 将整个文件读取出为一个字符串 file_get_contents()
file_get_contents(
string $filename,
bool $use_include_path = false,
resource $context = ?,
int $offset = 0,
int $length = ?
): string|false
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。
如果操作系统支持还会使用内存映射技术来增强性能。
<?php
$content = file_get_contents("test.txt");
echo $content;
?>
11. 将整个文件读取出并保存为一个数组 file()
file(string $filename, int $flags = 0, resource $context = ?): array
返回数组形式的文件内容。数组的每个元素对应于文件中的一行(结尾会附加换行符)。 失败时,file() 返回 **false**
。
<?php
$content = file("test.txt");
var_dump($content);
?>
12. 向文件写入一个字符串 fwrite()
fwrite(resource $handle, string $string, int $length = ?): int
fwrite() 把 string
的内容写入 文件指针 handle
处。
注意一: 文件必须以写入或读写方式打开才可以进行写入操作
注意二: 在写入时,文件被创建所在的目录,也必须要有写入的权限才可以.否则不能创建文件
<?php
$file = fopen("1.txt", 'w');
fwrite($file, "hello\n");
fwrite($file, "world");
fclose($file);
?>
13. fpus()
fputs(resource $handle, string $string, int $length = ?): int
此函数是该函数的别名:fwrite()。
<?php
$file = fopen("2.txt", 'w');
// 使用 fputs 写入
fputs($file, "hello\n");
// 使用 fwrite 写入
fwrite($file, "world");
fclose($file);
?>
14. file_put_contents()
file_put_contents(
string $filename,
mixed $data,
int $flags = 0,
resource $context = ?
): int
和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。
参数 data
可以是数组(但不能为多维数组).
<?php
$animals = ["chicken", "duck", "goose",'dog','pig'];
file_put_contents('1.txt', $animals);
?>