Home  >  Article  >  php教程  >  PHP中dat文件读写操作实例详解

PHP中dat文件读写操作实例详解

WBOY
WBOYOriginal
2016-05-25 16:40:122777browse

在php不不管读取什么类型的文件多半是使用fopen函数,然后配合其它的函数再进行操作,下面我来介绍读取dat数据文件的方法.

以下是一篇关于文件基本读写操作的文章,我曾经就是看了这篇文章后学会文件基本操作的,在这里发出来与大家共享,复制内容到剪贴板,代码如下:

$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"; 
// 显示文件内容 
$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 "数据成功写入文件"; 
$file_name = "data.dat"; 
// 绝对路径: homedata.dat 
//开源代码phprm.com 
$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',引起文件破坏.

我们当然不希望发生这样的情况,所以让我们看看文件锁定,复制内容到剪贴板,代码如下:

$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都要存取该文件,那么它们都可以读取,但是当一个程序需要写入的时候,它必须等待,直到读操作完成,文件所释放,复制内容到剪贴板,代码如下:

$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 "数据成功写入文件";

对于追加数据与其他操作有点不同,就是FSEEK,确认文件指针在文件尾部总是一个好习惯,如果是在Windows系统下,上面的文件中文件名前面需要加上''.

FLOCK杂谈:Flock()只在文件打开后才锁定,在上列中文件打开后才获得锁定,现在文件的内容只是在当时的内容,而不反映出别的程序操作的结果,因此不只是在文件追加操作,就是对读取操作也应该使用fseek.此处翻译可能不是很确切,但我想意思到了.

关于模式:

'r' - 只读方式打开, 文件指针置于文件头

'r+' - 读写方式打开,文件指针置于文件头

'w' - 只写打开,文件指针置于文件头,文件被剪切为0字节,如果文件不存在,尝试建立文件

'w+' - 读写打开,文件指针置于文件头,文件大小被剪切为0字节,如果文件不存在,尝试建立文件

'a' - 只写方式打开,文件指针置于文件尾,如果文件不存在,尝试建立文件

'a+' - 读写打开,文件指针置于文件尾,如果文件不存在,尝试建立文件


本文地址:

转载随意,但请附上文章地址:-)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn