- 作者:?Mukul翻译:?无伤?
读文件:[复制到剪贴板]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代码:- ??$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代码:- ??$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代码:- ??$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代码:- ??$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代码:- ??$file_name?=?"data.dat";??