- 5.1.1 PHP读写文本常用函数
- 5.1.2 PHP打开文件访问权限
- 5.1.3 文件打开 fopen()
- 5.1.4 文件关闭 fclose()
- 5.1.5 读取一个字符 fgetc()
- 5.1.6 文件结束判断 feof()
- 5.1.7 读取一行内容 fgets()
- 5.1.8 读取一行内容,并过滤 HTML 标记 fgetss()
- 5.1.9 读取指定大小内容 fread()
- 5.1.10 获取文件大小 filesize()
- 5.1.11 将整个文件读取出为一个字符串 file_get_contents()
- 5.1.12 将整个文件读取出并保存为一个数组 file()
- 5.1.13 向文件写入一个字符串 fwrite()
- 5.1.14 fpus()
- 5.1.15 ile_put_contents()
在 PHP 中,提供了一系列的系统函数,用于读写文本文件的内容。
5.1.1 PHP读写文本常用函数
| 函数名 | 说明 |
|---|---|
| fopen() | 打开文件 |
| fclose() | 关闭文件 |
| fgets() | 读取一行字符 |
| fgetss() | 读取一行字符,并过滤掉HTML和PHP标记 |
| fgetc() | 读取一个字符 |
| fputs() | 写入文件内容 |
| fwrite() | 写入文件内容 |
| file_get_contents() | 将整个文件读入一个字符串 |
| file_put_contents() | 将一个字符串写入文件 |
5.1.2 PHP打开文件访问权限
| 访问权限 | 说明 |
|---|---|
| r | 以只读方式打开文件 |
| r+ | 以读写方式打开文件 |
| w | 以写入方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
| w+ | 以读写方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
| a | 以写入方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
| a+ | 以读写方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
| x | 创建并以写入方式打开文件 |
| x+ | 创建并以读写方式打开文件 |
5.1.3 文件打开 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");5.1.4 文件关闭 fclose()
fclose(resource $handle): bool关闭一个已打开的文件指针,成功时返回 true, 或者在失败时返回 false。
在文件操作中,关闭文件操作虽然看不到明显的效果,但是一定要关闭,否则可能会产生内存泄露.fcolse($file);5.1.5 读取一个字符 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.1.6 文件结束判断 feof()
feof(resource $handle): boolfeof — 测试文件指针是否到了文件结束的位置
如果文件指针到了 EOF 或者出错时则返回 true,否则返回一个错误(包括 socket 超时),其它情况则返回 false。
上面的练习可以改为:<?php $file = fopen("test.txt", "r"); do{ $content = fgetc($file); echo $content; // 判断 文件 是否结束,如果结束就跳出循环,否则继续读取 }while(!feof($file)); fclose($file); ?>5.1.7 读取一行内容 fgets()
fgets(resource $handle, int $length = ?): stringfgets — 从文件指针中读取一行
从 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); ?>5.1.8 读取一行内容,并过滤 HTML 标记 fgetss()
fgetss(resource $handle, int $length = ?, string $allowable_tags = ?): stringfgetss — 从文件指针中读取一行并过滤掉 HTML 标记
allowable_tags可以用可选的第三个参数指定哪些标记不被去掉。<?php $file = fopen("https://www.baidu.com", "r"); do{ // 一次读取一行,默认是 1024字节 $content = fgetss($file); echo $content . "<br>"; }while(!feof($file)); fclose($file); ?>5.1.9 读取指定大小内容 fread()
fread(resource $handle, int $length): stringfread — 读取文件(可安全用于二进制文件)
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); ?>5.1.10 获取文件大小 filesize()
filesize — 取得文件大小,返回文件大小的字节数filesize(string $filename): int
注意一: 参数是测试文件的路径
注意二: 因为 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); ?>5.1.11 将整个文件读取出为一个字符串 file_get_contents()
file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。file_get_contents( string $filename, bool $use_include_path = false, resource $context = ?, int $offset = 0, int $length = ? ): string|false
如果操作系统支持还会使用内存映射技术来增强性能。<?php $content = file_get_contents("test.txt"); echo $content; ?>5.1.12 将整个文件读取出并保存为一个数组 file()
返回数组形式的文件内容。数组的每个元素对应于文件中的一行(结尾会附加换行符)。 失败时,file() 返回 false。file(string $filename, int $flags = 0, resource $context = ?): array<?php $content = file("test.txt"); var_dump($content); ?>5.1.13 向文件写入一个字符串 fwrite()
fwrite() 把 string 的内容写入 文件指针 handle 处。fwrite(resource $handle, string $string, int $length = ?): int
注意一: 文件必须以写入或读写方式打开才可以进行写入操作
注意二: 在写入时,文件被创建所在的目录,也必须要有写入的权限才可以.否则不能创建文件<?php $file = fopen("1.txt", 'w'); fwrite($file, "hello\n"); fwrite($file, "world"); fclose($file); ?>5.1.14 fpus()
此函数是该函数的别名:fwrite()。fputs(resource $handle, string $string, int $length = ?): int<?php $file = fopen("2.txt", 'w'); // 使用 fputs 写入 fputs($file, "hello\n"); // 使用 fwrite 写入 fwrite($file, "world"); fclose($file); ?>5.1.15 ile_put_contents()
和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。file_put_contents( string $filename, mixed $data, int $flags = 0, resource $context = ? ): int
参数 data 可以是数组(但不能为多维数组). ```php <?php $animals = [“chicken”, “duck”, “goose”,’dog’,’pig’]; file_put_contents(‘1.txt’, $animals);
?>
```
