PHP中文件读写操作
你一定用过“网络硬盘”吧,利用它可以按自己的需要新建文件夹来分门别类地把自己的一些文件保存起来,有的还可以在线编辑文件。
PHP中提供了一系列的I/O函数,能简捷地实现我们所需要的功能,包括文件系统操作和目录操作(如“复制[copy]”)。下面给大家介绍的是基本的文件读写操作:(1)读文件;(2)写文件;(3)追加到文件。
以下是一篇关于文件基本读写操作的文章,我曾经就是看了这篇文章后学会文件基本操作的,在这里发出来与大家共享:
- 作者:?Mukul
-
翻译:?无伤?
读文件:
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- //?要读取的文件的绝对路径:?homedata.dat?
- ?
- $file_pointer?=?fopen($file_name,?"r");?
- //?打开文件,"r"?是一种模式,或者说我们要进行的操作方法,详见本文后面的介绍
- ?
- $file_read?=?fread($file_pointer,?filesize($file_name));?
- //?通过文件指针读取文件内容
- ?
- fclose($file_pointer);?
- //?关闭文件
- ?
- print?"读取到的文件内容是:?$file_read";?
- //?显示文件内容
- ?>?
-
?
写文件:
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- //?绝对路径:?homedata.dat?
- ?
- $file_pointer?=?fopen($file_name,?"w");?
- //?"w"是一种模式,详见后面
- ?
- fwrite($file_pointer,?"what?you?wanna?write");?
- //?先把文件剪切为0字节大小,?然后写入
- ?
- fclose($file_pointer);?
- //?结束
- ?
- print?"数据成功写入文件";?
- ?
- ?>?
-
?
追加到文件后面:
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- //?绝对路径:?homedata.dat?
- ?
- $file_pointer?=?fopen($file_name,?"a");?
- //?"w"模式
- ?
- fwrite($file_pointer,?"what?you?wanna?append");?
- //?不把文件剪切成0字节,?把数据追加到文件最后
- ?
- fclose($file_pointer);?
- //?结束
- ?
- print?"数据成功追加到文件";?
- ?
- ?>?
-
?
以上只是简单介绍,下面我们要讨论一些更深层的。
有时候会发生多人写入的情况(最常见是在流量较大的网站),会产生无用的数据写入文件,?例如:
info.file文件内容如下?->?
|1|Mukul|15|Male|India?(n)?
|2|Linus|31|Male|Finland?(n)?
现在两个人同时注册,引起文件破坏->?
info.file?->?
|1|Mukul|15|Male|India?
|2|Linus|31|Male|Finland?
|3|Rob|27|Male|USA|?
Bill|29|Male|USA?
上例中当PHP写入Rob的信息到文件的时候,Bill正好也开始写入,这时候正好需要写入Rob纪录的'n',引起文件破坏。
我们当然不希望发生这样的情况,?所以让我们看看文件锁定:
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- ?
- $file_pointer?=?fopen($file_name,?"r");?
- ?
- $lock?=?flock($file_pointer,?LOCK_SH);?
- //?我使用4.0.2,所以用LOCK_SH,你可能需要直接写成?1.?
- ?
- if?($lock)?{?
- ?
- $file_read?=?fread($file_pointer,?filesize($file_name));?
- $lock?=?flock($file_pointer,?LOCK_UN);?
- //?如果版本小于PHP4.0.2,?用?3?代替?LOCK_UN
- ?
- }?
- ?
- fclose($file_pointer);?
- ?
- print?"文件内容为?$file_read";?
- ?
- ?>?
-
?
上例中,如果两个文件read.php和read2.php都要存取该文件,那么它们都可以读取,但是当一个程序需要写入的时候,它必须等待,直到读操作完成,文件所释放。
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- ?
- $file_pointer?=?fopen($file_name,?"w");?
- ?
- $lock?=?flock($file_pointer,?LOCK_EX);?
- //?如果版本低于PHP4.0.2,?用?2?代替?LOCK_EX
- ?
- if?($lock)?{?
- ?
- fwrite($file_pointer,?"what?u?wanna?write");?
- flock($file_pointer,?LOCK_UN);?
- //?如果版本低于PHP4.0.2,?用?3?代替?LOCK_UN
- ?
- }?
- ?
- fclose($file_pointer);?
- ?
- print?"数据成功写入文件";?
- ?
- ?>?
-
?
虽然"w"模式用来覆盖文件,?单我觉得不适用。
[复制到剪贴板] PHP代码:- <?php ?
- ?
- $file_name?=?"data.dat";?
- ?
- $file_pointer?=?fopen($file_name,?"a");?
- ?