PHP对文件的操作总结

1、使用fopen打开文件

$fp = fopen("a.txt", 'w'); //用写方法打开一个文件a.txt

fopen具有2个、3个或4个参数,通常是2个参数,第二个参数是打开文件的模式,以下是fopen打开文件的全部模式:

模式 模式名称 解释
r 只读 打开文件,从头开始读
r+ 只读 打开文件,从头开始读写
w 只写 从头开始读。若文件存在,则删除文件内容;若文件不存在,则创建文件
w+ 只写 从头开始读写,若文件存在,则删除所有,否则创建文件
x 谨慎写 写模式打开,若文件存在,文件不会被打开,fopen返回false
x+ 谨慎写 读写模式打开,若文件存在,文件不会被打开fopen返回false
a 追加 打开文件,若有内容,则在末尾添加内容,文件不存在创建文件
a+ 追加 打开文件,若有内容,从末尾开始读写,文件不存在则创建文件
b 二进制 推荐模式,用于和其他模式连接
t 文本 用于和其他模式结合,不推荐,除非已经用了b选项

fopen的第三个选项是可选的,代表是否在include_path中搜索一个文件,如果要,就设置成1

fopen的第四个参数也可选,用来打开远程文件,比如http://www.51projob.com

fopen返回的只是一个文件指针,要进行操作,还要用其他函数

2、fopen打开远程文件

首先,需要将php.ini中的allow_url_open开启

3、fwite用于向文件写入内容

fwite($fp, $outputstring);

另一个替换函数,是file_put_contents(),原型是:

int file_put_contents( string filename, string data, [, int flag] [, resource context])

另一个可以替代fopen的函数是file_get_contents,可以讲一个文本文件所有内容放入一个单个字符串中

4、fwite()的参数

fwite具有三个参数

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

第三个参数是写入的最大字符数目,比如,额可以这样写:

fwite($fp, $outputstring, strlen($outputstring));

5、fclose($fp)用于关闭文件

如果关闭成功,该函数则返回true值,但一般不用测试

6、判断何时读完文件:feof()

如果是按行、按字符读取文件,需要判断是否读完了,可以这样判断

while (!feof($fp)) {}

7、每次读取一行数据fgets(), fgetss(), fgetcsv()

  • $order = fgets($fp, 999); //一直读取数据,知道遇到了换行,或者EOF,或者999B
  • string fgetss(resource fp, int length, string [allowable_tags]); //和fgets一样,不过这个可以过滤PHP和HTML标记,并且还能指定要过滤的特殊标记,放在allowable_tags变量中就可以
  • array fgetcsv( resource fp,  int length [,  string delimiter [,  string enclosure]]);  //当文件中使用了定界符的时候,可以用这种方法读取,比如
    • $order = fgetcsv($fp,  10, "\t");//注意,返回的是数组

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

  • int readfile(string filename,  [int use_include_path  [, resource context]]);第三个参数只有文件远程打开才会用,返回值是文件的字节数目
  • $fp = fopen("a.txt", 'rb');  fpassthru($fp);  //如果成功,返回true,否则返回false
  • $arr  =  file("a.txt")将文件按行读取存放在$arr数组中

array file( string $filename [, int $flags = 0 [, resource $context ]] )

file()将整个文件载入到一个数组中,每行成为数组的一个元素

9、使用fgetc($fp)每次读取一个字符

10、读取任意长度string fread(resource fp,  int length);

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

12、确定文件大小filesize("a.txt");

13、删除一个文件unlink("a.txt");

14、在文件中定位:rewind()、fseek()和ftell()

  • rewind()将指针复位到文件的开始
  • int fseek( resource fp,  int offset [,  int whence]);//将文件指针从whence位置移动offset个字节,也可以用SEEK_CUR和SEEK_END作为whence

15、文件锁定

这是为了实现对文件的互斥访问而设置的函数

bool flock (resource fp,  int operation [,  int &wouldblock ] );

第二个参数指定文件被锁的类型:

  • LOCK_SH:读操作锁定,文件可以共享,别人可以读
  • LOCK_EX:写操作锁定,互斥的,文件不能被共享
  • LOCK_UN:释放已有的锁定
  • LOCK_NB:防止在请求加锁时阻塞

注意:flock不能用于NTF或者FAT文件系统

相关推荐

Leave a Comment