文件操作:增删改查
就是:读取、写入、删除这三个操作
./当前目录
../上一层目录
../../上两层目录
相对路径(用的多)
绝对路径
步骤:
1.打开文件:
fopen(filename,mode); 返回值是一个资源
mode取值(常用的是这6种):
r(以只读方式打开,文件不存在则尝试创建文件 指针指向文件头)
r+(读写方式打开,文件不存在则尝试创建之 指针指向文件头)
用 r 或 r+ 文件必须存在,否则会报错
w(写入方式打开,文件不存在则尝试创建之 指针指向文件头并删除文件内容)
w+(读写方式打开,文件不存在则尝试创建之 指针指向文件头并删除文件内容)
w会删除文件内容,删除后是不可恢复的,重要文件不能用w写入内容
w就是删掉之前的内容,并且写入新的内容
a(写入方式打开,追加,文件不存在则尝试创建之 将文件指针指向文件末尾)
a+(读写方式打开,读写,文件不存在则尝试创建之 将文件指针指向文件末尾)
2.进行读写操作
3.关闭文件
读取:
$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
fgets($fp);是读取一行,第二个参数是读多长,如果读取的内容带有标签,标签会被解析出来,渲染出标签效果
fgetss($fp);也是读取一行,但是会过滤掉标签,标签不会被渲染,也不会显示在浏览器中
fgetss($fp, 512, '<h1>');这个函数第二个参数是读取的长度,第三个参数是保留的标签(如果写了这个标签,他就不会被过滤,还是会被渲染出来)
(也可以用fgets($fp);和strip_tags — 从字符串中去除 HTML 和 PHP 标记 封装一个这个函数出来,同样可以做到fgetss这个函数的效果)
fgetc();只能获取一个英文字符
$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
写入:
fwrite(handle, string); handle往哪里写,string写入什么
fopen(filename,mode);filename文件名和路径 mode 用什么方式读文件
简易操作文件方式:
不需要打开和关闭文件:
file_put_contents($filename, '你好')w方式(删除之前的内容后写入)
file_put_contents($filename, '你好', FILE_APPEND);a方式,追加内容
删除文件:unlink
//fopen(filename,mode);filename文件名和路径 mode 用什么方式读文件
$filename = '1.txt';
$fp = fopen($filename, 'r');//这个返回值是一个资源
var_dump($fp);
image.png
$filename = '2.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r');//这个返回值是一个资源
var_dump($fp);
image.png
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r');//这个返回值是一个资源
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
//这里获取的是文件的字节数有多大
$file_size = filesize($filename);
$str = fread($fp, $file_size);
echo $str;
fclose($fp);
这样写有一个问题是如果文件太大就麻烦了,所以不建议直接一次性读取文件
可以每次读一部分
image.png
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r');//这个返回值是一个资源
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
//为了以防文件太大,一点一点的读
//需要知道文件什么时候结束,用feof()
//feof()判断文件指针(这里简单理解为光标)是否到达文件末尾
while(!feof($fp)){//!feof表示到文件末尾就不读了
$str = fread($fp, 1024);
echo $str;
}
fclose($fp);
image.png
$str = fread($fp, 10); 读取
$str = fgets($fp, 512); 读取一行
$str = fgetss($fp, 512, '<h1>'); 读取一行,过滤html和php标签(但是不过滤这个h1标签)
$str = fgetc($fp);//读取一个英文字符,
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r');//这个返回值是一个资源
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
//为了以防文件太大,一点一点的读
//需要知道文件什么时候结束,用feof()
//feof()判断文件指针(这里简单理解为光标)是否到达文件末尾
while(!feof($fp)){//!feof表示到文件末尾就不读了
//$str = fread($fp, 10); 读取
//$str = fgets($fp, 512); 读取一行
//$str = fgetss($fp, 512, '<h1>'); 读取一行,过滤html和php标签(但是不过滤这个h1标签)
$str = fgetc($fp);//读取一个英文字符,
//写在这个while循环里的话,就是一个一个的读取并输出
echo $str;
}
fclose($fp);
image.png
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r');//这个返回值是一个资源
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
$num = fwrite($fp, 'string');//返回值是数字,如果是0,就表示没有写入
//这个例子是以 r只读方式 打开的,所以会返回0
echo $num;
fclose($fp);
image.png
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'r+');//这个返回值是一个资源
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
$num = fwrite($fp, 'string');//返回值是6,表示写进去了6个字符
echo $num;
fclose($fp);
image.png
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'w');//w删除文件的内容,并写入新的内容
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
$num = fwrite($fp, 'string');//返回值是6,表示写进去了6个字符
echo $num;
fclose($fp);
$filename = '1.txt';
if(!file_exists($filename)){
//file_exists — 检查文件或目录是否存在,在前面加 ! 是表示不存在
//echo "文件{$filename}不存在"; 不在这里写了,直接在die里输出就可以了
die("文件{$filename}不存在");//die — 等同于 exit() 输出一个消息并退出
}
$fp = fopen($filename, 'a');//w删除文件的内容,并写入新的内容
//再打开一个文件的同时,先写关闭代码,省的中间写入代码太多,忘记写关闭文件代码
//$str = fread(handle, length);读取文件,返回值类型是字符串 第一个参数是资源,第二个参数是读多长
//$file_size = filesize(filename);获取文件内容的长度(因为读取文件第二个参数需要读多长,那就要知道文件有多大)
$file_size = filesize($filename);
// for($i=0; $i<10; $i++){ //将'string'写10次
// $num = fwrite($fp, 'string');//返回值是6,表示写进去了6个字符
// echo $num;
// }
//
fwrite($fp, '你好');
fclose($fp);
image.png
$filename = '1.txt';
$arr = file($filename);//file — 把整个文件读入一个数组中
//如果没有这个文件,不会自动创建文件
print_r($arr);//按换行得到的一个数组
image.png
$filename = '1.txt';
// $arr = file($filename);//file — 把整个文件读入一个数组中,如果没有这个文件,不会自动创建文件
// print_r($arr);//按换行得到的一个数组
$str =file_get_contents($filename);//返回字符串,上面file是返回数组
echo $str;
image.png
===================================================
$filename = '1.txt';
echo file_put_contents($filename, '你好');
//如果没有文件,先自动创建文件,再写入
//他是以w方式写入的,会清除之前的内容后再写入
//返回值是写入成功的数量
image.png
$filename = '1.txt';
echo file_put_contents($filename, '你好', FILE_APPEND);
//不写FILE_APPEND会清除之前的内容后再写入新内容
//写了FILE_APPEND,只会追加新内容
image.png
$filename = '1.txt';
unlink($filename);
运行后,文件被删掉了
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
// $class = [
// ['name'=>'张三', 'sex'=>'男', 'age'=>18];
// ['name'=>'李四', 'sex'=>'男', 'age'=>19];
// ['name'=>'李雷', 'sex'=>'男', 'age'=>20];
// ['name'=>'LUCY', 'sex'=>'女', 'age'=>17];
// ]
//
$filename = 'class.txt';
echo file_put_contents($filename, $student, FILE_APPEND);//将$student数组写入$filename中
image.png
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
$student = json_encode($student);
echo $student;
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
// $class = [
// ['name'=>'张三', 'sex'=>'男', 'age'=>18];
// ['name'=>'李四', 'sex'=>'男', 'age'=>19];
// ['name'=>'李雷', 'sex'=>'男', 'age'=>20];
// ['name'=>'LUCY', 'sex'=>'女', 'age'=>17];
// ]
//
$student = json_encode($student);
$str = '{"name":"\u5f20\u4e09","sex":"\u7537","age":20}';
$student = json_decode($str, true);
print_r($student);//这个数组会返回一个对象类型,因为这个数组是一个关联数组,所以,$str后面还要跟第二个参数,true,保证他之前是什么类型,转换之后还是什么类型
image.png
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
$student = json_encode($student);//把数组转成json格式的字符串
$filename = 'class.txt';
echo file_put_contents($filename, $student."\n", FILE_APPEND);//$student."\n" 这个\n是换行
image.png
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
$student = json_encode($student);//把数组转成json格式的字符串
$filename = 'class.txt';
//echo file_put_contents($filename, $student."\n", FILE_APPEND);$student."\n" 这个\n是换行
$class = file($filename);
print_r($class);
image.png
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
/* $student = json_encode($student);//把数组转成json格式的字符串 */
$filename = 'class.txt';
$class = file($filename);
foreach($class as $k=>$v){
$lass[$k] = json_decode($v, true);
//将字符串反序列化(转为数组)后保存
//此时$class已经是一个二维数组了
}
print_r($class);
image.png
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
$filename = 'class.txt';
$class = file($filename);
foreach($class as $k=>$v){
$class[$k] = json_decode($v, true);
}
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<table width="800" border="1" align="center">
<tr>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>操作</th>
</tr>
<?php
foreach($class as $v){
echo "<tr align='center'><td>{$v['name']}</td><td>{$v['sex']}</td><td>{$v['age']}</td><td>修改|删除</td></tr>";
}
?>
</table>
</body>
</html>
$student = ['name'=>'张三', 'sex'=>'男', 'age'=>20];
/*$student = json_encode($student);//把数组转成json格式的字符串 */
$filename = 'class.txt';
$class = [];
if(file_exists($filename)){
//file_exists — 检查文件或目录是否存在
//处理这个文件之前要先检查文件是否存在
//有这个文件才执行,没有就不执行了
$class = file($filename);
foreach($class as $k=>$v){
$class[$k] = json_decode($v, true);
}
}
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<title>学生列表</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<table width="800" border="1" align="center">
<caption><a href="add.php">添加学生</a></caption>
<tr>
<th>姓名</th>
<th>性别</th>
<th>年龄</th>
<th>操作</th>
</tr>
<?php
foreach($class as $v){
echo "<tr align='center'><td>{$v['name']}</td><td>{$v['sex']}</td><td>{$v['age']}</td><td>修改|删除</td></tr>";
}
?>
</table>
</body>
</html>
<?php
if(!empty($_POST)){//如果下面的post不为空,就操作
/* print_r($_POST);//此时接收到的数据是一个列表 */
$student = $_POST;//将获取到的值赋给$student
$student = json_encode($student);//将接收到的值(数组)转换成字符串
$num = file_put_contents('class.txt', $student."\n", FILE_APPEND);//将转换好的字符串保存
if($num > 0){//验证$num是否收到数据,大于0就成功,否则失败
die("<script>alert('添加成功'); location.href='study.php';</script>");//成功就输出并且跳转到显示页面
}else{
die("<script>alert('添加失败');location.href='add.php';</script>");//失败也输出信息但是停在此页面
}
}
?>
<!DOCTYPE html>
<html lang="zh">
<head>
<title>添加学生</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
<body>
<h3>添加学生</h3>
<form action="" method='post'>
<p>姓名: <input type="text" name="name"></p>
<p>性别: <input type="radio" name="sex" value="男" checked/>男 <input type="radio" name="sex" value="女" />女</p>
<p>年龄: <input type="text" name="age"></p>
<p><button>提交</button></p>
</form>
</body>
</html>
image.png
绿:内容
红:标题`
网友评论