php读取文件操作笔记

中秋了,吃饱喝足,再次发挥懒人精神,挑简单些的文件操作写写笔记吧。
1.简单的文件操作,fopen打开fclose关闭

if?($a=fopen("a.txt",r))?{
echo?"打开成功!<br>";
}else{
echo?"打开失败!<br>";
}
if?(fclose($a))?{
echo?"关闭成功!<br>";
}else{
echo?"关闭失败!<br>";
}

应该搭配其他函数使用,更加完美。
关于fopen的第二个参数(更多使用方式 查手册)

"r"???只读方式打开,将文件指针指向文件头。
"r+"???读写方式打开,将文件指针指向文件头。
"w"???写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+"???读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a"???写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+"???读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"???创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则?fopen()?调用失败并返回?FALSE,并生成一条E_WARNING?级别的错误信息。如果文件不存在则尝试创建之。这和给底层的?open(2)?系统调用指定?O_EXCL|O_CREAT?标记是等价的。此选项被?PHP?4.3.2?以及以后的版本所支持,仅能用于本地文件。
"x+"???创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则?fopen()?调用失败并返回?FALSE,并生成一条E_WARNING?级别的错误信息。如果文件不存在则尝试创建之。这和给底层的?open(2)?系统调用指定?O_EXCL|O_CREAT?标记是等价的。此选项被?PHP?4.3.2?以及以后的版本所支持,仅能用于本地文件。

2.完全读取文件并逐行存为数组file语句
例如读取姓名与年龄
文件a.txt

tom?22
jim?25
andy?33

//或得每一行的数据,按序存为数组
$datas=file("a.txt");
//循环遍历该数组,每行存给data一次
foreach?($datas?as?$data){
//读取每次的data按空格分隔的2个值的函数
list($name,$age)=explode("?",$data);
//输出
echo?"用户:$name?年龄:$age<br>";
}

3.读取整个文件为一个字符串file_get_contents语句
与上例相同的功能使用file_get_contents完成:

//读取
$datas=file_get_contents("a.txt");
//把读取后的字符串按换行符分割为数组(请尽量采用自己系统的换行符!!)
$temp=explode("\r\n",$datas);
//遍历分割后的函数
foreach?($temp?as?$data){
//将每行按空格分隔数组,并读取
list($name,$age)=explode("?",$data);
//输出
echo?"用户:$name?年龄:$age<br>";
}

4.读取csv文件的fgetcsv语句,csv是最简单的列表方式,可以用excel完美打开,在以前我用来生成数据库里的用户信息表传给领导看的...
a.csv文件

tom,22,beijing
jim,25,xian
andy,33,jinan

//只读模式打开
$file?=?fopen("a.csv","r");
//循环使用fgetcsv读取每行,按逗号分隔,每行最多1204个字节,并被读取
while(list($name,$age,$city)=fgetcsv($file,1204,","))?{
//输出
echo?"谁?$name?多大?$age?哪的?$city<br>";
}

哈哈,其实刚才的两个例子也可以读取这种文件,不过fgetcsv适合读取这种一行参数很多的。并且也不只能读取csv文件。
5.读取文件指针位置的一行fgets语句

$file?=?fopen("a.csv","r");
echo?fgets($file);
fclose($file);

默认读取1024个字节,如遇换行或结束就截止,可以在第一个选项里控制最多读取字节数。
姊妹fgetss语句,可以剔除所有html和php的标记,通过第三个选项可以控制那些不被剔除
a.html文件

<p><b><u>php文件操作笔记</u></b></p><p><b>php</b></p>

$file?=?fopen("a.html","r");
//保留加粗和换行,其他的包括下划线去掉
echo?fgetss($file,1024,"<b>,<p>");
fclose($file);

类似语句读取指定字节的数据,直到结尾(换行不理)fread语句(同上上个的用法)
6.读取指针位置一个字符的fgetc语句,对遍历长度未知的数据很有用(不过会因为超时而挂掉的....注意设置)。例子

$file?=?fopen("a.html","r");
//循环开始读取文件内容每次一个字节,直至结束并输出
while?(!?feof?($file))
{
echo?fgetc($file);
}
fclose($file);

7.readfile读取整个文件并输出缓冲,可以返回文件字节数

$a=readfile("a.html");
echo?"<br>多少个?",$a;

8.自定义格式读取文件fscanf语句,文件:

010-88888888-11
021-66666666-2222
022-99999999-1234

$file?=?fopen("a.txt","r");
while($user=fscanf($file,"%d-%d-%d"))?{
list($name,$age,$city)=$user;
//输出
echo?"区号:$name?电话:$age?分机号:$city<br>";
}

php

添加新评论