php对文件的操作

php支持对文件的打开、关闭、读取和写入操作。

 

1. 打开/关闭文件

 在处理文件内容之前,通常需要创建所谓的句柄。同样,结束该文件的操作之后,应当销毁该句柄。

将数据写入一个文件,一般有3个步骤:

(1)打开文件。如果文件不存在,则需要先创建它;

(2)将数据写入文件;

(3)关闭文件。

同样,从一个文件读取数据,也有3个步骤:

(1)打开文件。如果文件不能打开(例如文件不存在或没有读取该文件的权限等),就应该意识到这一点并且正确的退出;

(2)从文件中读取数据;

(3)关闭文件。

 

 1.1 打开文件

在php中,可以使用fopen()函数来打开文件,这个文件既可以是本地文件,也可以是网络上的文件,它支持相对路径和绝对路径。

$file = fopen("/file/text.txt", "r");
$file = fopen("http://www.demo.com/text.txt", "a");

 

调用fopen()的时候一般需要传递2-4个参数。通常情况下使用2个参数,正如以上代码所示。

(1)第一个参数为要打开文件的URL;

(2)第二个参数为文件的模式。文件模式可以告诉操作系统如何处理来自其他人或脚本的访问请求,以及一种用来检查你是否有权访问这个特定文件方法。在打开文件时有以下3种选择:

打开一个文件为了只读、只写或是读写;

如果要写一个文件,则可以覆盖所有已有的文件内容,或者将新数据追加到文件末尾;

如果在一个区分二进制文件和纯文本文件的系统上写一个文件,还必须指定其采用的方式。

(3)第三个参数为可选参数,如果资源位于本地文件系统,php则认为可以使用本地路径或相对路径来访问此资源。

(4)第四个参数也为可选参数,fopen()函数允许文件的名称以协议名开始,并且在一个远程位置打开该文件。通过设置这个参数,还可以支持一些其他协议。

 

1.2 关闭文件

在php中可以使用fclose()函数来关闭文件。如果成功,则返回true,否则返回false。

$file = fopen("text.txt", "w");
// do...
fclose($file);


2. 读取文件

 2.1 fread()和file()函数

 php读取文件时可以使用fread()函数,语法格式如下:

string fread(int $handle, int $length);

 

其中$handle是通过fopen()得到的数据源,打开某文件后,对这个文件的操作都可以通过这个数据源来实现。fread()的第二个参数是指定文件要读取的长度,可以通过filesize()函数来得到文件的总长度。

接下来看一个更有效的函数file(),该函数返回一个数组,数组中的每个元素就是文件的一行,各元素由换行符分隔,同时换行符仍附加在每个元素的末尾。示例代码如下:

$file = file("text.txt");

 

2.2 fpassthru()函数

fpassthru()函数可以通过fopen()打开的文件指针作为参数,来将文件中的信息标准输出到浏览器中,并在输出后关闭,代码如下:

$file = fopen("text.txt", "r");
fpassthru($file);

 如果读取操作成功,fpassthru()函数将返回true,否则返回false。

 

2.3 fgets()和fgetss()函数

fgets()函数可以读取指定文档中的一行,如果读取文件成功则返回读取的字符串,否则返回false。示例如下:

$order = fgets($file, 100);

 fgetss()函数与fgets()函数的不同之处在于,fgetss()函数可以过滤字符串中包含的php和html标记,语法结构如下:

string fgetss(resource file, int length, string[allowable_tags]);

 如果设置可选参数allowable_tags的值,那么该值在待处理字符串中将不被过滤。

 

2.4 fgetcsv()函数

如果文件中存在一些定界符,而我们想根据定界符来分开文件中的文件信息,则可以使用fgetcsv()方法,该方法将返回一个数组。语法形式如下:

array fgetcsv(resource handle[, int length[, string delimiter[, string enclosure]]])

 遇到换行时读取操作将不会停止,而会在读取了length个字符后停止。对于php5来说,如果省略length或将其设置为0,呢么长度没有限制,不过可能会影响执行效率。因为这会降低性能,所以应该选择一个较大的数值,保证它肯定能超过文件中最常一行的长度。可选参数delimiter(默认设为逗号)标识用于界定每个字段的字符。可选参数enclosure(默认设为双引号)标识用来设置字段环绕符(只允许一个字符)。使用此参数可以在不同的上下文中对delimiter参数中所包含的值进行匹配解析。

 

3. 写入文件

当写入文件时,要使用w(write)或a(append)之类的模式来打开文件。

fwrite()函数用来帮助向文件写入一行字符串。语法格式如下:

int fwrite(resource handle, string string[, int length])

 fwrite()函数接受两个参数:第一个参数是需要写入的文件资源,第二个参数是要写入的字符串:

$file = fopen("text.txt", "w");
$str = "Hello world!";
fwrite($file, $str);
fclose($file);

 

4. 方便的文件处理函数

 为了方便文件操作,php5提供了file_get_contents()和file_put_contents()函数。这两个函数继承了在文件操作流程上所需要的整套函数。这些工作包含打开和关闭文件。

file_get_contents()函数的功能实现与file()函数类似,不同的是file()函数读取文件后返回一个数组,而file_get_contents()函数则返回一个存储文件所有内容的字符串。如果要使用file()函数返回的内容,则要使用implode('', $file)来连接所有数组中的值才能达到file_get_contents()函数的效果。

而file_put_contents()则是最方便好用的写入文件函数,它需要传入两个参数,第一个参数为目标文件名,第二个参数为需要写入的内容。当我们想以追加的方式写入文件时,需要传入第三个参数并取值为FILE_APPEND。

 

5. 其他文件处理函数

bool copy(string source, string dest):将文件source复制给dest。

string dirname(string path):其中,path为指向一个文件的全路径的字符串,返回该文件的目录。

bool feof(resource handle):如果文件指针指向EOF(End Of File)或出错,则返回true,如果socket超时则返回一个错误,其他情况返回false。

bool file_exiets(string filename):如果存在由filename指定的文件或目录,则返回true,否则返回false。

int file_size(string filename):返回文件大小的字节数,如果出错,则返回false。

 

6. fopen()函数第二个参数常用打开方式说明

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

打开方式          说明

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      r                 指针指向文件的开头,以只读方式打开文件

      r+               指针指向文件的开头,以读写方式打开文件,写入数据从头覆盖原数据

      w                以写入方式操作文件,写入的数据将覆盖文件原先的数据

      w+              与w的功能基本相同,增加了读取功能

      a                 指针指向文件末尾,以可写方式打开文件,写入数据会追加到原先文件的末尾

      a+               与a的基本功能相同,增加了读取功能

      x                  如果目标文件存在,则返回警告;如果不存在,则创建该文件

      x+                与x的基本功能相同,增加了读取功能

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

注意:如果目标文件不存在,w+将会自动创建,而r+将会报错。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值