一:读写文本文件
写入文件步骤:
1,打开文件
2,向文件中写入内容
3,关闭文件
例如:
<?php
header("content-type:text/html;charset=utf-8");
$handle = fopen("doc.txt","w");
//设置变量=打开文件函数("打开文件名",”访问权限“)
fputs($handle, "你好中国");
//写入文件内容(要写入的文件,"写入的内容")
fclose($handle);
//关闭文件
常用函数:
函数名 | 说明 |
---|---|
fopen() | 打开文件 |
fclose() | 关闭文件 |
fgets() | 读取一行字符 |
fgetss() | 读取一行字符,并过滤掉HTML和PHP标记 |
fgetc() | 读取一个字符 |
fputs() | 写入文件内容 |
fwrite() | 写入文件内容 |
file_get_contents() | 将整个文件读入一个字符串 |
file_put_contents() | 将一个字符串写入文件 |
feof() | 文件判断结束 |
fread() | 读取指定文件大写 |
filesize | 获取文件大小 |
文件关闭fclose()
fclose(resource $handle): bool
fcolse($file);//关闭例句
关闭一个已打开的文件指针,成功返回true,失败是返回false。
在文件操作中,关闭文件操作虽然看不到明显的效果,但是一定要关闭,否则可能会产生内存泄漏。
1、读取一个字符fgect()
从文件句柄里获取一个字符,也就是读取完一个字节。
返回一个包含由一个字节的字符串,该字节从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);
?>
2、文件结束判断 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);
?>
3、读取一行内容 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);
?>
4、读取一行内容,并过滤 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);
?>
5、读取指定大小内容 fread()
fread(resource $handle, int $length): string
fread — 读取文件(可安全用于二进制文件)
fread() 从文件指针 handle 读取最多 length 个字节。 该函数在遇上以下几种情况时停止读取文件:
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);
?>
7、 将整个文件读取出为一个字符串 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;
?>
8、 将整个文件读取出并保存为一个数组 file()
file(string $filename, int $flags = 0, resource $context = ?): array
返回数组形式的文件内容。数组的每个元素对应于文件中的一行(结尾会附加换行符)。
失败时,file() 返回 **false**
。
<?php
$content = file("test.txt");
var_dump($content);
?>
9、向文件写入一个字符串 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);
?>
10、写入文件内容 fputs()
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);
?>
11、将一个字符串写入文件中 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);
?>
文件访问权限:
在 PHP 中,通过 fopen() 函数打开文件时,必须要指定打开文件的访问权限。文件访问权限:
访问权限 | 说明 |
---|---|
r | 以只读方式打开文件 |
r+ | 以读写方式打开文件 |
w | 以写入方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
w+ | 以读写方式打开文件 注:如果该文件不存在,则创建文件;如果该文件存在,则替换现有文件 |
a | 以写入方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
a+ | 以读写方式打开文件,并向文件末尾追加内容 注:如果该文件不存在,则创建文件 |
x | 创建并以写入方式打开文件 |
x+ | 创建并以读写方式打开文件 |
二:字符串函数
常用字符串函数:
函数名 | 说明 |
---|---|
chr() | 从指定ASCII值返回字符 |
explode() | 分割字符串 |
trim() | 移除字符串两侧的空白字符或其他字符 |
ltrim() | 移除字符串左侧的空白字符或其他字符 |
rtrim() | 移除字符串左侧的空白字符或其他字符 |
md5() | 使用MD5算法对字符串进行加密 |
nl2br() | 将字符串中的\n转换为 |
ord() | 返回字符串中第一个字符的ASCII值 |
strlen() | 返回字符串长度 |
str_replace() | 替换字符串中的一些字符(大小写敏感) |
strpos() | 返回字符串在另一字符串中第一次出现的位置(大小写敏感) |
strrpos() | 返回字符串在另一字符串中最后一次出现的位置(大小写敏感) |
strtolower() | 把字符串转换为小写字母 |
strtoupper() | 把字符串转换为大写字母 |
substr() | 截取字符串 |
例如:
<?php
header("content-type:text/html;charset=utf-8");
$a = trim("==中国==","=");
echo "移除字符串两侧的其他字符:{$a}<br/><br/>";
//移除字符串,“==中国==”两侧的“=”字符
$a = explode("-","北京-上海-深圳");
echo "分割字符串:";
print_r($a);
echo "<br/><br/>";
//将字符串按照“-”进行分割,并返回数组
//Array ( [0] => 北京 [1] => 上海 [2] => 深圳 )
$a = strlen("你好中国");
echo "字符串长度:{$a}<br/><br/>";
//获取字符串长度
$a = md5("张三");
echo "md5加密:{$a}<br/><br/>";
//通过MD5算法,对字符串“张三”进行加密
$a = str_replace("Hello", "你好", "Hello,北京");
echo "字符串替换:{$a}<br/><br/>";
//将字符串里的“hello”替换为“你好”
$a = strtolower("HelloWorld");
echo "转为小写字母:{$a}<br/><br/>";
//将字母转为小写字母
$a = strtoupper("HelloWorld");
echo "转为大写字母:{$a}<br/><br/>";
//将字母转为大写字母
$a = substr("HelloWorld", 5,5);
echo "字符串截取:{$a}<br/><br/>";
//截取从第五个字符向右数五个字符,不包括第五个字符。
$str_val = substr($arr[3],3);
//将下标为3的值从第三个字符开始截取后赋值给变量 $str_val。