6.2.2 读出文件的内容
文件打开后,就可以从文件中读出内容,以供程序使用。本节通过一个具体实例,来讲述PHP中和读文件有关的函数。
(1)建立一个文本文件,供程序打开和读取其内容之用。该文本内容如下所示。
<b><h3>最新动态</h3></b>
40 名企业家自费植树
中国战机南疆出击
姚明31分火箭胜太阳
(2)将该文件以名称info.dat保存在服务器文档根目录的上级目录data下。下面编写读取这个文件内容的PHP程序,该程序如代码6-4所示。
代码6-4 读取文件内容6-4.php
01 <?php
02 $fp=fopen($_SERVER['DOCUMENT_ROOT']."/../data/info.dat",'r');//打开指定的文件
03
04 if(!$fp)
05 {
06 echo"<b>Error:打开文件错误,请检查目录是否正确,或稍后再试!</b>";
07 exit;
08 }
09
10 while(!feof($fp))//循环读取文件
11 {
12 $line=fgets($fp);//读取文件的一行
13 echo$line;
14 echo'<br/>';
15 }
16
17 fclose($fp);//关闭文件
18 ?>
【代码解析】代码第2行使用函数fopen()打开文件,并且向其传入了第2个参数'r',表示以只读方式打开该文件,此时程序只可以读出文件的内容而不能向文件写入数据。接着,程序判断文件是否成功打开,即判断句柄$fp是否为TRUE。如果打开文件失败,程序会向页面输出一个错误信息,然后立即终止程序执行,语句“exit;”用来终止程序继续执行。
程序第10行使用了while循环来读文件,直到文件的末尾,其中函数feof()用来判断是否到了文件的末尾。该函数使用文件句柄$fp作为其参数,当达到文件末尾时,它会返回TRUE。这个程序中,当没有达到文件末尾时,函数执行while语句的循环体。第12行语句的意思是,取出文件中的一行赋给变量$line。函数fgets()会读取文件中的一行,直到遇到换行字符(\n)。该函数接收的参数是已打开的文件的句柄,返回值是文件的一行内容。函数fgets()可以接收第2个参数,表示读取一行内容的字节数(bytes),例如fgets($fp,100)表示读取一行中的100字节的内容,如果没有传入该参数,fgets()默认读取1024字节内容。最后,第17行使用函数fclose($fp)关闭已打开的文件。代码6-4的执行结果如图6-6所示。
除了使用函数fgets()读出文件的一行内容外,还可以使用另外3个函数读入整个文件:函数readfile()、函数file()和函数get_file_contents()。
(1)函数readfile()读入文件的整个内容,该函数的语法如下所示。
int readfile(string$filename);
该函数的参数$filename是要打开的文件名称,如果打开文件成功,函数的返回值是从文件读入的字节数,否则返回FALSE。该函数还有两个可选参数,它们是比较高级的用法,这里不再赘述。
(2)函数file()可以将整个文件读入一个数组,该函数的语法如下所示。
array file(string$filename,[int include_path]);
函数file()的参数$filename是要打开的文件,第2个参数是可选的,如果其值为1,表示PHP将在include_path中查找该文件,include_path是php.ini文件中的一个配置项。该函数读入整个文件的内容,将其存入数组后返回该数组。数组中的每个单元对应文件中的每一行,包括换行符在内。如果file()处理失败,返回值是FALSE。
(3)函数get_file_contents()和函数file()类似,只不过它将整个文件内容读入一个字符串。该函数的语法如下所示。
string get_file_contents(string$filename);
该函数返回文件$filename的所有内容,如果失败,返回值是FALSE。