您的位置:首页 > 编程语言 > PHP开发

欢迎使用CSDN-markdown编辑器

2016-03-01 10:56 597 查看

1、打开文件

要在PHP中打开一个文件,可以使用fopen()函数。这个时候我们还需要指定如何使用它,这就是文件模式。


1.1、选择文件模式

从本质上,文件模式可以告诉操作系统一种机制,这种机制可以决定如何处理来自其他人或脚本的访问请求,以及一种用来检查你是否有权访问这个特定文件的方法。
当打开一个文件的时候,有以下3种选择:
1)打开文件为了只读,只写或者读和写。
2)如果要写一个文件,可能是希望覆盖所有已有的文件内容,或者仅仅将新数据追加到文件末尾。如果该文件已经存在,也可以终止程序的执行而不是覆盖该文件。
3)如果希望在一个区分了二进制方式和纯文本方式的系统上写一个文件,还必须指定采用的方式。


其中,函数fopen()支持以上3种方式的组合。

1.2、使用fopen()打开文件

$fp = fopen("$DOCUMENT_ROOT/../orders/orders.txt", 'w');
调用fopen()的时候,需要传递2个、3个或4个参数。通常使用2个参数。
注意:在UNIX环境下,目录中的间隔符是正斜线(/)。如果使用的是Windows平台,可以使用正斜线或者反斜线。如果使用反斜线,就必须使用转义,这样函数才可以正确理解这些字符。一般我们还是使用正斜线,这样代码不需要任何修改就可以在WINDOWS和UNIX机器上运行。
fopen()函数的第二个参数是文件模式,它是一个字符串,指定了将对文件的操作。


fopen()函数的文件模式总结如下表:

模式 模式名称 意义

r 只读 读模式—打开文件,从文件头开始读

r+ 只读 读写模式—打开文件,从文件头开始读写

w 只写 写模式—打开文件,从文件头开始读。如果该文件已经存在,将删除所有文件已有内容。如果该文件不存在,函数将创建这个文件

w+ 只写 写模式—打开文件,从文件头开始读写。如果该文件已经存在,将删除所有文件已有内容。如果该文件不存在,函数将创建这个文件

x 谨慎写 写模式打开文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数返回false,而且PHP将产生一个警告

x+ 谨慎写 写/读模式打开文件,从文件头开始写。如果文件已经存在,该文件将不会被打开,fopen()函数将返回false,而且PHP将产生一个警告

a 追加 追加模式—打开文件,如果该文件已有内容,将从文件末尾开始追加(写),如果该文件不存在,函数将创建这个文件。

a+ 追加 追加模式—打开文件,如果该文件已有内容,将从文件末尾开始追加(写)或者读,如果该文件不存在,函数将创建这个文件

b 二进制 二进制模式—用于与其他模式进行连接。如果文件系统能够区分二进制文件和文本文件。推荐一直使用这个选项以获得最大程度的可移植性

t 文本 用于与其他模式的结合。不是推荐选项

fopen()函数的第3个参数是可选的。如果要在include_path中搜索一个文件,就可以使用它。如果希望进行进行这个操作,可以将这个参数设置为 1.

第4个参数也是可选的.fopen()函数允许文件名称以协议名称开始,并且在一个远程的位置打开文件。

如果fopen()成功打开一个文件,该函数将返回一个指向这个文件的文件指针。我们就是通过这个文件指针来操作这个文件的。

2、写文件

在PHP中可以使用fwrite()或者fputs()来写文件。调用方式如下:
fwrite($fp, $outputstring);
这个函数告诉PHP将保存在$outputstring中的字符串写入到$fp指向的文件中。


2.1、fwrite()的参数

fwrite()的原型如下所示:
int fwrite(resource handle, string string [, int length])
其中第3个参数length是写入的最大字符数。


2.2、文件格式

3、关闭文件

当使用完文件后,应该将其关闭。调用fclose()函数:
fclose($fp);
如果该文件被成功关闭,函数将返回一个true值。反之,该函数将返回false。


4、读文件

4.1、以只读模式打开文件:fopen()

仍然使用fopen()函数打开文件。以只读模式打开文件,故使用了"rb"文件模式。


4.2、知道何时读完文件:feof()

使用feof()函数作为文件结束的测试条件:
while(!feof($fp))
函数feof()的唯一参数是文件指针。如果该文件指针指向了文件末尾,它将返回true。


4.3、每次读取一行数据:fgets()、fgetss()和fgetcsv()

1)使用fgets()函数来读取文件内容:$order =  fgets($fp, 999);
2)fgets()函数的一个变体是fgetss()函数,其原型:string fgetss(resource fp, int length, string [allowable_tags]);


它可以过滤字符串中包含的PHP和HTML标记。

3)fgetscv()函数是fgets()的另一个变体。其原型:array fgetscv(resource fp, int length [, string delimiter [, string enclosure]])

当文件中使用了定界符时,可以使用该函数将文本分成多行。

4.4、读取整个文件:readfile()、fpassthru()和file()

4.5、读取一个字符:fgetc()

4.6、读取任意长度:fread()

函数原型:string fread(resource fp, int length);


5、使用其他有用的文件函数

5.1、查看文件是否存在:file_exists()

5.2、确定文件大小:filesize()

5.3、删除一个文件:unlink()

5.4、在文件中定位:rewind()、fssek()和ftell()

6、文件锁定

在PHP中,文件锁定是通过flock()函数来实现的。当一个文件被打开并且在进行读写操作之前,应该调用这个函数。这个函数的原型如下:
bool flock(resource fp, int operation [, int &wouldblock])


注意:flock()函数无法在NFS或其他网络文件系统中使用。

实例1:

$visitorIP = $_SERVER["REMOTE_ADDR"];

date_default_timezone_set('Asia/Chongqing');

$currentTime = date("H:i:s");

$file_path = './1.txt';

if(file_exists($file_path)){

$handle = fopen($file_path, 'r+');

$file_size = filesize($file_path);

$content = fread($handle, $file_size);

// $fstat = fstat($handle);

// var_dump($fstat);exit();

}else {

$handle = fopen($file_path, 'x+');

$content = '\r\n No more content';

}

echo 'the content is:'.$content;

if(!fwrite($handle, '</br>'.'IP: '.$visitorIP.' Time: '.$currentTime)) echo 'Write error!';

fclose($handle);

//$file = file_get_contents('./1.txt');//可以获得

//var_dump($file);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php