13.3 文件处理的高级应用

13.3 文件处理的高级应用

视频讲解:光盘TMlx13文件处理的高级应用.exe

在PHP中,除了可以对文件进行基本的读写操作外,还可以对文件指针进行查找、定位,对正在读取的文件进行锁定等,本节将进一步学习文件处理的高级技术。

13.3.1 远程文件的访问

PHP支持URL格式的文件调用,只要在php.ini文件中配置一下即可。在PHP中找到allow_url_fopen,将该选项设为ON,重启服务器后即可使用HTTP或FTP的URL格式。如:

fopen('http://127.0.0.1/tm/sl/index.php', 'rb');

13.3.2 文件指针

PHP可以实现文件指针的定位及查询,从而实现所需信息的快速查询。文件指针函数有rewind()、fseek()、feof()和ftell()。

1.rewind()函数

该函数将文件handle的指针设为文件流的开头,语法如下:

bool rewind ( resource handle )

注意

如果将文件以附加模式(“a”)打开,写入文件的任何数据总是会被附加在后面,不论文件指针的位置在何处。

2.fseek()函数

fseek()函数实现文件指针的定位,语法如下:

int fseek ( resource handle, int offset [, int whence] )

handle为要打开的文件。

offset为指针位置或相对whence的偏移量,可以是负值。

whence的值包括以下3种:

SEEK_SET,位置等于offset字节。

SEEK_CUR,位置等于当前位置加上offset字节。

SEEK_END,位置等于文件尾加上offset字节。

如果忽略whence,系统默认为SEEK_SET。

3.feof()函数

该函数判断文件指针是否在文件尾,语法如下:

bool feof ( resource handle )

如果文件指针到了文件结束的位置,就返回true,否则返回false。

4.ftell()函数

ftell()函数返回当前指针的位置,语法如下:

int ftell ( resource handle )

【例13.7】下面使用4个指针函数来输出文件07.txt中的内容,实例代码如下:(实例位置:光盘TMsl137)

<?php $filename="07.txt"; //指定文件路径及文件名 if(is_file($filename)){ //判断文件是否存在 echo"文件总字节数:".filesize($filename)."<br>"; //输出总字节数 $fopen=fopen($filename, 'rb'); //打开文件 echo"初始指针位置是:".ftell($fopen)."<br>"; //输出指针位置 fseek($fopen,33); //移动指针 echo"使用fseek()函数后指针位置:".ftell($fopen)."<br>"; //输出移动后的指针位置 echo"输出当前指针后面的内容:".fgets($fopen)."<br>"; //输出从当前指针到行尾的内容 if(feof($fopen)) //判断指针是否指向文件末尾 echo"当前指针指向文件末尾:".ftell($fopen)."<br>"; //如果指向了文件尾,则输出指针位置 rewind($fopen); //使用rewind()函数 echo"使用rewind()函数后指针的位置:".ftell($fopen)."<br>"; //查看使用rewind()函数后指针的位置 echo"输出前33个字节的内容:".fgets($fopen,33); //输出前33个字节的内容 fclose($fopen); //关闭文件 }else{ echo "文件不存在"; } ?>

运行结果如图13.7所示。

图13.7 文件指针函数

13.3.3 锁定文件

在向一个文本文件写入内容时,需要先锁定该文件,以防止其他用户同时修改此文件内容。在PHP中锁定文件的函数为flock(),语法如下:

bool flock ( int handle, int operation)

handle为一个已经打开的文件指针,operation的参数值如表13.4所示。

表13.4 operation的参数值

【例13.8】本例使用flock()函数锁定文件,然后再写入数据,最后解除锁定,关闭文件。实例代码如下:(实例位置:光盘TMsl138)

<?php $filename='08.txt'; //声明要打开的文件名称 $fd=fopen($filename, 'w'); //以w形式打开文件 flock($fd, LOCK_EX); //锁定文件(独占共享) fwrite($fd, "hightman1"); //向文件中写入数据 flock($fd, LOCK_UN); //解除锁定 fclose($fd); //关闭文件指针 readfile($filename); //输出文件内容 ?>

在向文件写入数据时,使用“w”或“w+”选项来打开文件。这时如果使用了LOCK_EX,则同一时间访问此文件的其他用户无法得到文件的大小,也不能进行写操作。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

微信扫一扫

微信扫一扫

微信扫一扫,分享到朋友圈

13.3 文件处理的高级应用