PHP程序文件的写入和读取操作
下面小编就为大家带来一篇PHP程序文件的写入和读取操作。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
读写文件是最常见的IO操作。PHP内置了读写文件的函数,用法和C是兼容的。
在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,
所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),
然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
一.实现文件读取和写入的方法
1.通过fopen函数打开文件:$fp =fopen(filename,mode,include_path,context),fp为Resource类型
2.进行文件读取或者文件写入操作(这里使用的函数以1中返回的$fp作为参数)
3. 调用fclose($fp)关闭文件
二.使用fopen方法打开文件
fopen(filename,mode,include_path,context) 其中 filename文件路径[string],mode打开模式[string])
fopen的第一个参数为文件路径,有绝对路径和相对路径
1. 绝对路径:
在windows下工作的小伙伴们应该很熟悉,windows下的路径分隔符是“\”而不是“/”,但我们在写入路径时不能以钦定的“\”为分隔符
<?php $fp = fopen("C:\wamp64\www\text.txt",'w');?>
<?php $fp = fopen("C:/wamp64/www/text.txt",'w');?>
运行时无报错,说明参数是有效的。
【注意】fopen函数不能理解“\”分隔符,如果你想要使用“/”,那么要使用转义,如写成:"C://wamp64//www//text.txt"这种写法也是可以的,函数也能理解,不会报错。但即使这样,也不推荐使用“/”,因为在OS(mac)下只能识别“/”不能识别“/”
本小节的结论:推荐坚持使用“/”作为分隔符
2.相对路径:
另外一个问题:服务器的目录结构可能会有较大的改变,这时原来写的绝对路径就要全部重写了。所以我们引入了相对路径的写法:
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT/aa.txt", 'w');
• $_SERVER是PHP的超级全局变量,通过$_SERVER['DOCUMENT_ROOT']取到服务器的默认根目录
服务器的默认根目录可通过php.ini修改
• $_SERVER['DOCUMENT_ROOT']在这里等同于C:/wamp64/www
本小节的结论:推荐使用相对路径
fopen的第二个参数为打开模式
设置打开模式后,我们就相当于为接下来的读写操作设置了权限:
最基本的几个模式:
“r”:只能读取文件,不能写入文件(写入操作被忽略)
“w”:只能写入文件,不能读取文件(读取操作被忽略)
“a”:只追加文件,与“w”类似,区别是“w”删除原有的内容,“a”不删除原有内容,只追加内容
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT/aa.txt", 'w');
fwrite($fp, '在写模式下写入');
fclose($fp);
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT/aa.txt", 'r');
fwrite($fp, '在读模式下写入');
fclose($fp);
r是只读,w是只写(原来有的内容全删除),a是追加(不删除原有内容),这都好理解。
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r+'); fwrite($fp,'r+ mode'); fclose($fp);?>
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'a+'); fwrite($fp,'a+ mode'); fclose($fp);?>
•采用w+模式写入文本“w+ mode”
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'w+'); fwrite($fp,'w+ mode'); fclose($fp);?>
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r');//打开文件 if(file_exists("$DOCUMENT_ROOT/text.txt")){//当文件存在时,才读取内容 while(!feof($fp)){//判断文件指针是否到达末尾 $c = fgetc($fp);//每执行一次fgetc(),文件指针就向后移动一位 echo $c;//输出获取到的字节 } } fclose($fp);//关闭文件?>
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r'); echo fgetc($fp);//只做一次输出 close($fp);?>
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r'); echo fgetc($fp);//连续做三次输出 echo fgetc($fp); echo fgetc($fp); fclose($fp);?>
2.一次读取多个字节 ――通过fread()方法:
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r'); echo fread($fp, 3);//一次输出三个字节即一个汉字字符(UTF-8) fclose($fp);?>
改成:
echo fread($fp, 6);
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'] $fp = fopen("$DOCUMENT_ROOT/text.txt",'r');//打开文件 if(file_exists("$DOCUMENT_ROOT/text.txt")){//当文件存在时,才读取内容 while(!feof($fp)){//判断文件指针是否到达末尾 $line = fgets($fp);//返回一行文本,并将文件指针移动到下一行头部 echo $line."<br/>";//输出获取到的一行文本 } } fclose($fp);//关闭文件?>
$line = fgets($fp,10);
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $fp = fopen("$DOCUMENT_ROOT/text.txt",'r'); fpassthru($fp); fclose($fp);?>
<?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $file_array = file("$DOCUMENT_ROOT/text.txt");//取到文件数组 foreach ($file_array as $value) {//输出数组元素 echo $value."<br/>"; }?>
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
function print_file_pointer($fp)
{
//定义一个打印文件指针位置的函数
echo " <br/>//此时文件指针的位置:";
echo ftell($fp) . "<br/>";
}
$fp = fopen("$DOCUMENT_ROOT/aa.txt", 'r');
echo fgetc($fp);//通过fgetc连续输出三个字节
echo fgetc($fp);
echo fgetc($fp);
print_file_pointer($fp);//打印此刻文件指针的位置
echo fread($fp, 6);//通过fread一次输出6字节
print_file_pointer($fp);//打印此刻文件指针的位置
echo fgets($fp); //通过fgets输出一整行
print_file_pointer($fp);//打印此刻文件指针的位置
fpassthru($fp); //一次性输出全部内容
print_file_pointer($fp);//打印此刻文件指针的位置
fseek($fp, 33);//使文件指针移动到33字节位置
print_file_pointer($fp);//打印此刻文件指针的位置
rewind($fp);//使文件指针移动到0字节位置(初始位置)
print_file_pointer($fp);//打印此刻文件指针的位置
fclose($fp);
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT/aa.txt", 'r');
while (!feof($fp)) {
echo fgets($fp);
echo ftell($fp);
}
fclose($fp);
以上这篇PHP程序文件的写入和读取操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
相关推荐
深度学习 -- 损失函数
深度残差网络(Deep Residual Networks (ResNets))
深度学习 -- 激活函数
神经网络训练 -- 调整学习速率
生成对抗网络(GAN)改进与发展
生成对抗网络(GAN)优点与缺点
生成对抗网络(GAN)的训练
生成对抗网络(GAN)基本原理
生成模型与判别模型