牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP文件处理函数归纳

创建时间:2015-02-05 投稿人: 浏览次数:181

一.打开和关闭文件


  PHP大部分对文件的操作都需要先打开文件,当然文件操作完成以后再关闭文件,其中打开文件使用fopen()函数,语法如下:

resource fopen(string filename , string mode [ ,bool use_include_path]);

  fopen() 函数共有三个参数,第一个参数filename是路径和文件名,可以是相对路径也可以是绝对路径;第二个参数mode是文件的打开方式,其取值如下:

 mode取值   模式名称       说明                                          
r 只读 只能读文件,文件指针初始位置在文件的开头;如果文件不存在会报warning,且不会创建新文件
r+ 读写 可读可写,文件指针初始值在文件的开头;使用r+模式打开不会先清空内容,如果写入数据,
会挨个字符覆盖原来的内容;如果文件不存在会报warning,且不会创建新文件
w 只写 只能写入,先清空文件内容,然后文件指针初始位置在开头,全部重新写;
如果文件不存在,会自动创建这个文件
w+ 读写 可读可写,同w一样打开文件即清空,文件指针在开头,如果文件不存在会自动创建
x 谨慎写 只能写入,且文件不应该存在,打开后自动创建,如果存在的话文件不会被打开,并报warning
a 追加 只写,文件指针在文件末尾,往后继续写(不论文件指针在哪);如果文件不存在则自动创建
a+ 追加 可读可写,写的规则同a
b 二进制 二进制模式,window可以区分二进制文件和文本文件,推荐使用
t 文本 文本模式
     

   而第三个参数use_include_path是可选的,当为1或true时,会打开php.ini中指定路径的文件。

   另外,fopen() 函数的返回值是一个文件指针,这个文件指针指向文件中的某个位置,可以通过fseek()移动其位置,文件指针也是很多其他文件操作函数的参数,例如fclose() ,fgets(), fgetc(), fread(),  fwrite() 这些函数,都需要先用fopen()取得文件指针才能使用。


  PHP关闭文件是通过fclose() 函数实现的,语法如下:

bool fclose(resource handle);
  handle为文件指针,由fopen() 函数得到,fcolse() 成功返回true,失败返回false。

  eg:

<?php
  $fopen=fopen("file.txt","rb");   //打开文件
  ......                           //文件操作
  fclose($fopen);                  //关闭文件
?>

二.读写文件内容

   

  1)读全部文件内容:不需要先打开文件,参数为路径和文件名


  1.  readfile() 函数用于直接输出文件内容,不需要打开文件,其参数为路径与文件名,也不需要echo,其中换行变为空格输出,如出现错误返回false,语法如下:

int readfile(string filename);
  

  2.  file() 函数把文件内容的每一行分别存放入一个数组中,返回值即为这个数组,全空的一行也会成一个空的元素,有几行就有几个元素,也不用先打开文件,语法如下:

array file(string filename);
      eg:

<?php
  $farr=file("file.txt");
  foreach($farr as $cont){
    echo $cont."<br>";    
}
?>


 3.  file_get_contents() 函数把文件内容读到一个字符串中,换行变为空格,失败返回false,语法如下:

string file_get_contents(string filename);

2)读部分文件内容:要先打开文件得到文件指针,作为函数的参数,读完后指针自动向后移动,读取后文件指针永远指向读取的最后一个字符

1.  fgets() 函数可以用于读一行的内容,返回值是字符串,需要用echo输出。其两个参数分别为文件指针和要读取的数据长度,实际返回的是:从指针开始(指针可能在中间,指针前的部分不输出),数据长度length -1个字节的字符串,如length为 3 则返回 2 个字节的字符(数字英文一个字节,中文两个字节,空格一个字节,回车两个字节),如果没有设置length参数,则默认把整行都读完。语法如下:


string fgets(resource handle,[ int lenght] );


2.fgetss() 与 fgets() 唯一的不同是前者会忽略掉脚本标记,如一些字体格式脚本,用fgetss()这些格式将不会被显示出来。


3.fgetc()函数用于读单个字符,即返回指针所指的那个字符,读后制作自动后移,遇EOF(指针在文件结束位置)则返回false,语法如下:


string fgetc(resource handle);

     eg:

<?php
   $fopen=fopen("file.txt","rb");
   while(false!=($chr=fgetc($fopen))){
    echo $chr;
}
  fclose($fopen);
?>

4.fread()函数用于读指定长度的数据,与fgets()不同的是:fread()返回的是length个字节,而fgets()返回的是length-1个字符,语法如下:


string fread(resource handle,int length);


 3)将数据写入文件,也需要文件指针作为参数,从文件指针所指位置开始写入数据


1.fwrite() 函数用于写入内容,其返回值为实际写入的字节数,三个参数分别为文件指针,需写入内容,写入的最大长度,从文件指针所指位置开始往后写,一直到写入了length后停止,如果没有设置length或写入内容字节数小于length,则全部写入,文件原来相应位置有内容则将其覆盖。

需要特别注意的是文件的打开方式,用w或w+打开则会先清空原文件文件指针在开头;用r+ 打开不会清空文件且文件指针在文件开头,写入的内容覆盖原来的内容;用a 或a+ 打开不会清空文件且文件指针在末尾,写入内容追加在原来内容之后,也只有用a打开写入不影响原来的内容。

语法如下:

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

2.file_put_contents()  函数相当于一次完成了fopen(), fwrite(), fclose() 三个操作,参数只要写文件地址即可,不需要文件指针,简化了代码,但是不能设置最大写入长度length,并且默认文件打开方式为w,会清空原文件内容,语法如下:

int file_put_contents(string filename, string data);


3)修改文件指针位置(需要先打开文件获得文件指针)


1.rewind() 函数将文件指针设置为文件的开头。语法如下:

bool rewind(resource handle);

2.fseek() 用于移动文件指针,非常重要。函数成功返回 0,否则返回 -1。函数的三个参数分别为handle,offset,whence。其中handle为文件指针;offest以字节为单位,为指针的绝对位置或者相对whence参数的偏移量,这样要根据第三个参数决定;whence的值包括以下三种,必须大写:

SEEK_SET,绝对定位,offset的值即时指针的位置,如当offset为0时,文件指针在第一个字节上;当offset为1时,文件指针在第二个字节上。值得注意的是一个中文是包括两个字节的,如果指针指向一个中文的第二个字节时,读出时会读出乱码。

SEEK_CUR,相对定位,相对于指针当前的位置前后移动,此时offset为一个偏移量,可正可负,正数表示往后移动,负数表示往前移动。

SEEK_END,相对定位,相对于文件尾(有内容的最后一个字节再往后一个字节,为空)前后移动,此时offset同样为一个偏移量,当offset为-1时指针指向的是最后一个字节。

另外,如果文件指针设置到开头以前,则看作指向开头,如果超过设置到文件尾以后,看作指向文件尾,读出的是一个空值。

如果不设置whence,则默认为SEEK_SET方式。


int fseek(resource handle, int offset, [whence]);


3.feof() 函数用于判断指针是否在文件末尾。语法如下:

bool feof(resource handle);

4.ftell() 函数用于返回当前指针的位置,单位为字节,相当于返回SEEK_SET模式下的offset值。语法如下:

int ftell(resource handle);

5.只要是读文件内容的函数,都自带移动文件指针的功能。


三.对文件自身的修改(不需要打开文件)

1.copy() 函数用于将文件从路径一复制到路径二,路径要写在引号内,包括文件名和扩展名。函数成功返回true,失败返回false,成功的话用echo输出为1。语法如下:

bool copy(string path1, string path2);

2.rename() 函数用于重命名文件,实际上两个参数依旧是两个路径,将文件以新名字从旧路径复制到新路径,再删除旧路径的文件,若再同一个目录中则直接重命名。语法如下:

bool rename(string path1, string path2);

3.unlink() 函数用于删除文件。语法如下:

bool unlink(string path);

4.fileatime() 函数用于返回文件最后一次被访问时间,以UNIX时间戳的形式返回。语法语法如下:

int fileatime(string path);


5.filemtime() 函数用于返回最后一次被修改的时间,也是以UNIX时间戳形式返回。语法如下:

int filemtime(string path);

6.filesize() 函数用于获取文件内容的字节数,字母数字一个字节,中文两个字节,空格一个字节,回车两个字节。语法如下:

int filesize(string path);

7.realpath() 函数用于返回文件的绝对路径。语法如下:

string realpath(string path);

8.pathinfo() 函数用用于返回一个数组,其中包含文件的路径信息,如相对路径(如果在当前目录中返回 "." ),全名,扩展名,文件名等等。语法如下:

array pathinfo(string path); 
  eg:

$arr=pathinfo("file.txt");
foreach($arr as $method=>$value){
   echo $method.":".$value."<br>";
}

9.stat() 函数用于返回一个数组,包括文件大小,最后修改时间等相关信息。语法如下

array stat(string path);


四.上传文件


1.要上传文件先要写上传文件域,要写一个form,from里一定要写enctrype="multipart/form-data",然后在form内部写一个type="file"的input和一个提交按钮。


2.预定义变量$_FILES储存了上传文件的相关信息,十分重要。$_FILES是一个二维数组,外层只有一个元素filename,是type="file"的input中设定的name;内层有5个元素,包含了上传文件的信息,具体如下:

$_FILES[filename][name]  存储的是上传文件的文件名,包括扩展名

$_FILES[filename][size]   存储的是文件大小,单位为字节

$_FILES[filename][tmp_name]  文件上传是会先保存在一个临时文件目录中成为一个临时文件,tmp_name即为这个临时文件名

$_FILES[filename][type]  上传文件的类型

$_FILES[filename][error]  上传文件的结果,0表示上传成功    


3.文件会先保存为一个临时文件,当脚本结束式系统将自动删除这个临时文件,所以我们需要move_uploaded_file() 函数来将这个临时文件移动到我们希望的位置,函数的两个参数一个是临时文件名,即为$_FILES["tmp_name"],另一个我们希望保存到的新路径和文件名,文件名一般为$_FILES["name"]。语法如下:

bool move_uploaded_file(string filename, string destination);
  eg:

<?php
	if(!empty($_FILES["upfile"]["name"])){
	$fileinfo = $_FILES["upfile"];
	move_uploaded_file($fileinfo["tmp_name"],$fileinfo["name"]);
	}
?>


<form action="" method="post" enctype="multipart/form-data" name="form">
  <input name="upfile" type="file" ></input>
  <input type="submit" name="submit" value="上传"></input>
</form>

 这里的第二个参数使用相对位置保存在同一个目录中,如果想保存在其他目录中,可以"……/……/ ".$fileinfo["name"] 这样写;如果想保存在前几级的目录中,两点即为返回上一级目录,如"../ ".$fileinfo["name"] 即为返回上一级,"../../ ".$fileinfo["name"] 为返回上两级,".. /mysql/ ".$fileinfo["name"] 表示保存在上一级的其他文件夹中。








声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。