PHP文件处理及高级应用
PHP文件处理—打开/关闭文件
一:打开文件
对文件进行操作的时候,我们首先要做的就是打开文件,这是进行数据存取的第一步。在PHP中使用 fopen()函数打开文件,fopen()函数的语法如下:
resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )
参数 filename 是要打开包含路径的文件名,可以使相对路径,也可以是绝对路径。如果没有任何前缀侧表示打开的事本地文件,参数 mode 是打开文件的方式,可以取值如下:
二:关闭文件
对文件的操作结束后应该关闭这个文件,否则可能会引起错误。在 PHP 中使用 fclose()函数关闭文件,该函数的语法格式如下;
bool fclose ( resource $handle )
具体看下面的示例代码:
<?php $f_open = fopen(‘./index_ok.php‘,‘rb‘); ... fclose($f_open);
PHP文件处理—如何读取文件(一行,整个文件)
从文件中读取数据
从文件中读取数据,可以读取一个字符、一行字符串或者是整个文件,还可以读取指定长度的字串。
1.读取整个文件:readfile()、flie()以及file_get_contents()三个函数。
readfile()函数
readfile()函数用于读入一个文件并且将其写入到输出缓冲,如果出现错误则返回 false。
使用 readfile()函数,不需要打开文件和关闭文件,也不需要 echo ,print等输出语句,直接先写出文件路径就可以了。
flie()函数
flie()函数也可以读取整个文件的内容,只是 file()函数将文件内容按行存放到数组中,包括换行符在内,如果读取失败则返回 false。
file_get_contents()函数
file_get_contents()函数将文件的内容(fliename)读入到一个字符串中。如果没有 offset 和 maxlen参数 ,将从参数offset所指定的位置开始读取长度为 maxlen的一个字符串。如果读取失败那么就会返回false。
下面的实例就是使用上面的三个函数读取文件内容,具体代码如下:
<html> <body> <table border="1"> <tr> <td>readfile()</td> <td><?php readfile(‘text.txt‘); ?></td> </tr> <tr> <td>file()</td> <td><?php $f_arr = file(‘text.txt‘); foreach($f_arr as $cont){ echo $cont.‘<br>‘; } ?></td> </tr> <tr> <td>file()</td> <td><?php $f_chr = file_get_contents(‘text.txt‘); echo $f_chr; ?></td> </tr> </table> </body> </html>
输出结果为:
2.读取一行数据:fgets()函数和fgetss()函数
(1) fgets()函数
fgets()函数用于一次读取一行数据。
(2)fgetss()函数
fgetss()函数是fgets()函数的变体,用于读取一行数据。同事,fgetss()函数会过滤掉被读取内容中的 HTML 和 PHP标记。
该函数能够从读取的文件中过滤掉任何 html 和 PHP 标记,可以使用参数来控制哪些标记不被过滤掉。
<html> <body> <table border="1"> <tr> <td>fgets()</td> <td><?php $f_open = fopen(‘text.txt‘,‘rb‘); while(!feof($f_open)){ echo fgets($f_open); } fclose($f_open); ?></td> </tr> <tr> <td>fgetss()</td> <td><?php $f_open = fopen(‘text.txt‘,‘rb‘); while(!feof($f_open)){ echo fgetss($f_open); } fclose($f_open); ?></td> </tr> </table> </body> </html>
输出结果为:
PHP文件处理—读取文件(一个字符,字串)
一:读取一个字符:fgetc()函数
下面的实例用 fgetc()函数逐个字符读取文件里的内容,并且输出,具体示例代码如下:
<?php $fopen = fopen(‘text.txt‘,‘rb‘);//创建文件资源 while(false !== ($chr = fgetc($fopen))){ echo $chr; } fclose($fopen);
二:读取指定长度的字串:fread()函数
<?php $filename = ‘text.txt‘; $fopen = fopen($filename,‘rb‘);//创建文件资源 echo fread($fopen,6); echo ‘<p>‘; echo fread($fopen,filesize($filename));
PHP文件处理—写入文件及操作文件
一:将数据写入文件
写入数据也是 PHP 中常用的文件操作,在PHP中使用 fweite() 和file_put_contents()函数向文件中写入数据。
1.fwrite()也称之为fputs(),他们两个的用法是相同的。
2.file_put_contents()函数是PHP5新增的函数
使用file_put_contents()函数和依次调用 fopen(),fwrite(),fclose()函数所实现的功能一样。下面我们通过具体实例比较一下!
本实例首先使用 fwrite()函数向文件写入数据,在使用file_put_contents()函数写入数据,具体示例代码如下:
<?php $filename = ‘text.txt‘; $str = ‘cyy you~‘; $fopen = fopen($filename,‘wb‘) or die(‘文件不存在‘); fwrite($fopen,$str); fclose($fopen); readfile($filename); $str2 = ‘cyy2 you~‘; file_put_contents($filename, $str2); readfile($filename);
输出结果为:
二:操作文件
PHP 除了可以对文件内容进行读写,对文件本身同样也可以进行操作,如:复制,重命名,查看修改日期等。PHP 内置了大量的文件操作函数,常用的文件操作函数如下表:
注意:
在读写文件时,除了file(),readfile()等少数几个函数外,其他操作必须要先使用 fopen()函数打开文件,最后用 fclose()函数关闭文件,文件的信息函数(如:filesize,filemtime 等)则都不需要打开文件,只要文件存下就可以了!
PHP目录处理—打开/关闭目录
一:打开目录
打开/关闭目录和打开/关闭文件类似,但是打开的文件如果不存在,那么就会自动创建一个新的文件,而打开的目录如果不正确,那么就一定会报错!PHP使用 opendir()函数来打开目录
二:关闭目录
关闭目录使用 closedir()函数
下面的实例就是为打开和关闭目录的流程代码,具体示例代码如下:
<?php $path = ‘D:\phpstudy_pro\WWW\test\uploads‘; if(is_dir($path)){ if($dir = opendir($path)){ echo $dir; }else{ echo ‘路径错误‘; exit(); } } closedir($dir);
结果:
PHP目录处理—浏览目录以及操作目录
—:浏览目录
在 PHP 浏览目录中的文件,我们使用 scandir()函数
该函数返回一个数组,包含 directory 中的所有文件和目录。参数 sorting_order 指定排序顺序,默认按字母升序排序,如果添加了该参数,那么就会变为降序排序。
下面的实例将查看一个目录下的所有文件,具体示例代码如下:
<?php $path = ‘D:\phpstudy_pro\WWW\test‘; if(is_dir($path)){ $dir = scandir($path); foreach($dir as $value){ echo $value.‘<br>‘; } }else{ echo ‘路径错误‘; } closedir($dir);
运行结果如下:
二:操作目录
目录是一种特殊的文件,也就是说,对文件的操作函数(如:重命名)多数同样适用于目录,但是还有一些特殊的函数只是专门针对目录的,下面列表就是一些常用的目录操作函数:
PHP文件处理的高级应用—远程文件访问及锁定文件
一:远程文件的访问
PHP 支持URL格式的文件调用,只要在 php.ini中设置一下就可以了,php.ini 中找到allow_url_fopen,将该选项设为ON。重启服务器后就可以使用 HTTP或者FTP的URL格式了
<?php $filename = ‘http://localhost/test/text.txt‘; readfile($filename);
二:锁定文件
在向一个文本文件写入内容的时候,需要先锁定该文件,以防止其他用户同事修改此文件的内容,在PHP中锁定文件的函数为 flock()
在下面的实例中 使用 flock()函数锁定文件,然后在写入数据,最后解除锁定,关闭文件,具体示例代码如下:
<?php $filename = ‘text.txt‘; $fd = fopen($filename,‘w‘); //锁定文件,独占共享 flock($fd,LOCK_EX); fwrite($fd,‘new cyy‘); //解除文件锁定 flock($fd,LOCK_UN); fclose($fd); readfile($filename);
说明:
在向文件写入数据的时候,使用 W 或者 w+ 模式打开文件,这个时候如果使用了 LOCK_EX,那么同一时间访问此文件的其他用户就无法获得文件的大小,不能进行操作!
PHP文件处理的高级应用—文件指针
一:rewind()函数
该函数将文件 handle 的指针设置为文件流的开头
注意:
如果将文件与追加(“a”)模式打开,那么写入文件的任何数据总是会被附加在文件已有的内容末尾,不论文件指针的位置在何处!
二:fseek()函数
fseek()函数实现文件指针的定位
三:feof()函数
该函数判断文件指针是否在文件尾
四:ftell()函数
ftell()函数返回当前指针的位置
下面就是使用上面 4个指针函数来输出文件中的内容,示例代码如下:
<?php $filename = ‘text.txt‘; if(is_file($filename)){ echo ‘文件总字节数:‘.filesize($fopen).‘<br>‘; $fopen = fopen($filename,‘rb‘); echo ‘指针初始位置:‘.ftell($fopen).‘<br>‘; fseek($fopen,14); echo ‘此时指针位置:‘.ftell($fopen).‘<br>‘; echo ‘当前指针之后的内容:‘.fgets($fopen).‘<br>‘; if(feof($fopen)){ rewind($fopen); echo ‘此时指针位置:‘.ftell($fopen).‘<br>‘; fclose($fopen); } } else{ echo ‘文件不存在‘; }
输出结果为:
欢迎QQ交流讨论:965794175