首先,用fopen($fp)打开文件。
然后,用以下介绍的函数读取文件。
最后,用fclose($fp)关闭文件。
一、每次读取一行数据:fgets( )、fgetss( )、fgetcsv( )
1、fgets( ):每次读一行
$fp=fopen("$DOCUMENT_ROOT/phptest/orders/orders.txt",'rb');
while(!feof($fp)){ // 文件结束的测试条件
$order=fgets($fp,999); //
echo $order."<br />";
}
2、fgetss()
函数原型:string fgetss(resource fp, int length, string[allowable_tages])
fgetss()函数与fgets()非常相似,但是它可以过滤字符串中包含的PHP和HTML标记。如果要过滤任何特殊的标记,可以将它们包含在allowalbe_tags字符串中。当读取由别人所编写的文件或包含用户输入的文件时,出于操作安全的考虑,可以使用fgetss()函数。
3、fgetcsv()
函数原型:array fgetcsv(resource fp,int length[,string delimiter,string enclosure])
当在文件中使用了定界符时,可以用fgetcsv()函数将文件分成多行。
参数length应该比要读的文件中最长数据行的字符数大。
enclosure参数用来指定每行中封闭每一个域的字符。如果没有指定任何字符,在默认情况下,这个字符就是双引号。
二、读取整个文件:readfile()、fpassthru()、file()
1、readfile()
函数原型:int readfile(string filename [, int user_include_path] [, resource context]);
第二个可选参数制定了PHP是否应该在include_path中查找文件,这一点与fopen()函数一样。
可选的context参数只有在文件被远程打开时(如通过HTTP)才使用。
2、fpassthru()
$fp=fopen("$DOCUMENT_ROOT/phptest/orders/orders.txt",'rb');
fpassthru($fp);
如果读操作成功,将返回true,否则返回false。
3、file()
$filearray=file("$DOCUMENT_ROOT/phptest/orders/orders.txt");
这行代码可将整个文件读入到一个名为$filearray的数组中。文件中的每一行都将作为一个元素保存在这个数组中。
但是,在PHP的早期版本中,该函数对二进制文件并不是安全的。
4、fiel_get_contents()
这个函数与readfile()相同,但是该函数将以字符串的形式返回文件内容,而不是将文件内容回显到浏览器中。
三、读取一个字符:fgetc()
$fp=fopen("$DOCUMENT_ROOT/phptest/orders/orders.txt",'rb');
while(!feof($fp)){
$char=fgetc($fp);
if(!feof($fp)){
echo ($char=="\n" ? "<br />" : $char);
}
}
缺点:它返回文件结束符EOF,而fgets()则不会。读取出字符后还需要判断feof(),因为我们并不希望将文件结束符EOF回显到浏览器中。
四、读取任意长度:fread()
函数原型:string fread(resource fp, int length);
使用该函数时,它或者是读满了length参数所指定的字节数,或是读到了文件末尾或网络数据包的结束。
五、其他有用的文件函数
1、查看文件是否存在:file_exists()
如果希望在不打开文件的前提下,检查文件是否存在,可以使用该函数。
2、确定文件大小:filesize()
filesize($fp);
它以字节为单位返回一个文件的大小,结合fread(),可以使用它们一次读取整个文件。
如以下代码:
$fp=fopen("$DOCUMENT_ROOT/phptest/orders/orders.txt",'rb');
echo nl2br(fread($fp, filesize("$DOCUMENT_ROOT/phptest/orders/orders.txt")));
nl2br()函数将输出的\n字符转换为HTML的换行符<br />
3、删除一个文件:unlink()
例如:unlink("$DOCUMENT_ROOT/phptest/orders/orders.txt");
如果无法删除这个文件,则返回false。
通常,如果对该文件的访问权限不够或者该文件不存在,该函数将返回false。
4、在文件中定位:rewind()、fseek()、ftell()
rewind()函数可以将文件指针复位到文件的开始。
ftell()函数可以以字节为单位报告文件指针当前在文件中的位置。也可以使用该函数
将文件指针指向文件的某个位置:int fseek(resource fp, int offset, int whence);
调用该函数可以将文件指针fp从whence位置offset个字节。whence是一个可选参数,
默认值SEEK_SET表示文件的开始处,SEEK_CUR表示文件指针的当前位置、
SEEK_END表示文件的结束。