文件处理函数

一、文件的创建与删除

  touch($filename ,$time ,$atime):文件名为$filename的文件不存在时,新建该文件;文件存在时,函数可改变该文件的修改时间;成功返回true,失败返回false

    $time:可选参数,将文件的修改时间设定为$time,如果未使用该参数则默认使用当前系统的时间

    $atime:可选参数,将文件的访问时间设为$atime,如果未指定该参数则使用$time参数值,若二者均未指定,则默认使用当前系统时间

  tmpfile():以读写模式创建一个具有唯一文件名的临时文件,文件创建后即为打开状态可直接进行内容读写,文件会在脚本结束或fclose()关闭后自动删除,创建成功返回文件句柄,失败返回false

  tempnam($dir ,$prefix):在指定目录中创建一个具有唯一文件名的临时文件,创建完成后须使用fopen()打开该文件才可进行内容读写,文件不会自动删除须使用unlink()手动删除该文件,若指定目录不存在,会在系统的临时文件下生成该临时文件,创建成功返回新的临时文件名,失败返回false

    $prefix:用于产生的该临时文件的前缀字符串,系统仅会取该段字符中的前3个字符作为前缀字符

  unlink($filename):删除文件,成功返回true,失败返回false

二、文件的打开、关闭、锁定

  fopen($filename ,$mode):打开本地文件或远程URL文件,成功返回文件指针资源,失败返回false

    $mode:指定对文件的访问类型,包括:

      "r":只读方式打开,将文件指针指向文件头

      "r+":读写方式打开,将文件指针指向文件头

      "w":写入方式打开,将文件指针指向文件头并将文件内容清空覆盖写入,若文件不存在则创建之

      "w+":读写方式打开,将文件指针指向文件头并将文件内容清空覆盖写入,若文件不存在则创建之

      "a":写入方式打开,将文件指针指向文件末尾接着已有内容后面写入,若文件不存在则创建之

      "a+":读写方式打开,将文件指针指向文件末尾接着已有内容后面写入,若文件不存在则创建之

      "x":创建并以写入方式打开,将文件指针指向文件头,若文件已存在则fopen()调用失败并返回false,文件不存在则创建之

      "x+":创建并以读写方式打开,其他行为和"x"一样

    若打开的是二进制文件,则参数$mode要加上"b"

      例:

        $filename="c:\\files\\demo.gif";

        $handle=fopen($filename,"rb");

  fclose($handle):关闭已打开的文件指针,成功返回true,失败返回false

  popen($command ,$mode):打开指向进程的管道,该进程由$command给定的command命令执行而产生,成功返回文件指针资源,失败返回false

    $mode:同函数fopen()的$mode参数

    例:

      $handle=popen("/bin/ls","r");

  pclose($handle):关闭用popen()打开的指向管道的文件指针,成功返回进程的终止状态,失败返回-1

  flock($handle ,$option):对文件进行加锁、解锁,文件资源句柄关闭或脚本结束后不会自动解锁,必须手动解锁,执行成功返回true,失败返回false

    $option:可用以下值以“|”组合使用:

      LOCK_SH:取得共享锁定(读取的程序)

      LOCK_EX:取得独占锁定(写入的程序)

      LOCK_UN:释放锁定(无论共享或独占)

      若不希望flock()在锁定时堵塞,用LOCK_NB

三、文件的复制与移动

  copy($path ,$newPath):拷贝文件,将文件从原路径$path复制到$newPath,如果目标路径下同名文件已存在则会被覆盖,成功返回true,失败返回false

  rename($old ,$new):重命名文件或文件的路径,可利用该函数将文件移动到另一路径下,成功返回true,失败返回false

  move_uploaded_file($filename ,$path):将上传的文件移动到新位置,本函数检查并确保文件$filename是通过HTTP POST上传机制上传的合法文件,若文件合法则将其移动到指定的路径$path下,成功返回true;若文件不是合法上传的,则不进行操作并返回false,若文件为合法上传但由于某些原因无法移动,也返回false

四、文件内容的写入、输出

  fwrite($handle ,$str ,$length):写入文件内容,将字符串$str的内容写入文件指针$handle处,成功返回写入的字符数,失败返回false(可用于二进制文件)

    $length:可选参数,当写入了$length个字节或写完了$str后,写入就会停止

    例:

      $filename="./demo.txt";

      $handle=fopen($filename,"a");

      fwrite($handle,"要添加到文件中的内容");

      fclose($handle);

  fputs($handle ,$str):写入文件内容,fwrite()函数的别名

  fread($handle ,$length):读取文件内容,从当前文件指针所在位置读取最多$length个字节,成功返回读取到的内容字符串,失败返回false(可用于二进制文件)

    例:

      $filename="/usr/local/something.txt";

      $handle=fopen($filename,"r");

      $contents=fread($handle,filesize($filename));

      fclose($handle);

    若读取的内容为远程URL文件或popen()打开的进程文件返回的流,读取会在一个包可用之后停止,应将每段数据收集起来合并成块:

      $handle=fopen("http://www.example.com/","rb");

      $contents='';

      while(!feof($handle)){

        $contents.=fread($handle,8192);

      }

      fclose($handle);

  file_put_contents($filename ,$data ,$flags):将数据写入到文件中,功能和依次调用fopen()、fwrite()、fclose()写入一样,若文件不存在则在指定的文件路径下创建该名称文件,成功则返回写入到文件中的字节数,失败返回false

    $data:指定要写入的数据,类型可以为string、array(不能为多维数组)或stream资源

    $flags:可选参数,以下值可用“|”组合使用:

      FILE_USE_INCLUDE_PATH:在include目录中搜索$filename

      FILE_APPEND:如果文件$filename已存在,追加写入数据而不是覆盖

      LOCK_EX:在写入时获得一个独占锁

  file_get_contents($filename):获得文件中的内容,以字符串形式返回,文件$filename须已存在,功能类似函数file(),但首选file_get_contents(),失败时返回false

    若要指定开始读取的偏移量位置以及读取的最大长度:file_get_contents($filename ,NULL ,NULL ,$offset ,$maxlen)

  file($filename ,$flags):将文件内容输出到一个数组中,返回的数组中的每个元素对应于文件中的一行,且附加了换行符,失败则返回false

    $flags:可选参数,以下值可用“|”组合使用:

      FILE_USE_INCLUDE_PATH:在include_path中查找文件

      FILE_IGNORE_NEW_LINES:在数组的每个元素的末尾不要添加换行符

      FILE_SKIP_EMPTY_LINES:跳过空行

  fscanf($handle ,$format):将文件中的内容格式化输出,每调用一次函数fscanf()会从文件中读取一行,成功则以数组形式返回解析后的内容,失败返回false

    $format:与函数sprintf()中的数据类型格式参数相同,同C语言下的数据占位符

      %%:返回一个百分号 %

      %b:二进制数

      %c:字符类型

      %d:包含正负号的十进制整型

      %e:使用小写的科学计数法(103

      %E:使用大写的科学计数法(103

      %u:不包含正负号的十进制数无符号整型

      %f:浮点数(本地设置)

      %F:浮点数(非本地设置)

      %g:较短的 %e 和 %f(不保留无效的0)

      %G:较短的 %E 和 %f(不保留无效的0)

      %o:八进制数

      %s:字符串

      %x:十六进制数(小写字母)

      %X:十六进制数(大写字母)

    例:

      $handle=fopen("users.txt","r");
      while($userinfo=fscanf($handle,"%s\t%s\t%s\n")){
          list($name,$profession,$countrycode)=$userinfo;
             //... do something with the values
      }
      fclose($handle);

  readfile($filename):将给定的文件的内容写到输出缓冲区,成功则返回从文件中读取并写到输出缓冲区的字符数,失败返回false

  fpassthru($handle):将给定的文件指针从当前位置到EOF的内容写到输出缓冲区,成功则返回读取并写到输出缓冲区的字符数,失败返回false

    若要输出已有数据的文件中的全部数据,须调用函数rewind()将文件指针指向文件头;若既不需要修改文件也不在特定位置检索,只想将文件全部内容输出到缓冲区,应该使用函数readfile();

  fflush($handle):将缓冲区的内容写入到文件中,成功返回true,失败返回false

五、文件内指针操作

  fseek($handle ,$offset ,SEEK_SET):设置文件指针的位置,新位置从文件头开始以字节数度量,成功返回0,失败返回-1

    $offset:位置偏移量;若要移动到相对文件尾之前的位置,须将该参数设为负值,并设置第三个参数为SEEK_END

    SEEK_SET:可选参数,默认值,设定位置等于$offset字节,其他值包括:

      SEEK_CUR:设定位置为当前位置加上$offset

      SEEK_END:设定位置为文件尾加上$offset

  ftell($handle):返回文件指针的位置,即在文件流中的偏移量,失败返回false

  feof($handle):检测文件指针是否到了文件结束的位置,如果文件指针到了EOF或出错时返回true,其他情况返回false

  rewind($handle):将文件指针重新指向文件头,成功返回true,失败返回false

  fgetc($handle):从文件指针中读取单个字符,每调用一次该函数则返回一个包含有一个字符的字符串,碰到EOF则返回false,但返回的值可能为读取到的“0”或“false”,故在循环判断时应使用“===”

  fgets($handle ,$length):从文件指针中读取一行,将该行内容返回为字符串,失败则返回false

    $length:可选参数,读取一行并返回长度最多为$length-1个字节的字符串,在碰到换行符、EOF或已经读取了$length-1个字节时停止,如果未指定该参数,则默认为1K(1024字节)

  fgetss($handle ,$length ,$tags):从文件指针中读取一行并过滤掉HTML和PHP标记,将内容返回为字符串,失败则返回false

    $length:可选参数,读取一行并返回长度最多为$length-1个字节的字符串

    $tags:可选参数,指定哪些标记不被过滤掉

六、文件属性的获取与修改

  clearstatcache():清除文件属性信息的缓存,当使用以下列出的函数时,PHP将自动缓存这些函数的返回信息以提供更快的性能,但如果文件在脚本执行期间被删除或被修改,此时缓存中的文件信息仍为之前的,即须清除缓存以重新获取即时信息

    受影响的函数包括:

    stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir(),is_link(),

    filectime(),fileatime(),filemtime(),fileinode(),filegroup(),fileowner(),filesize(),filetype(),fileperms()

  stat($filename):获取文件的属性信息,若$filename是符号连接,则返回的属性信息是被连接文件本身的,而不是符号连接;成功则以数组形式返回信息,失败返回false

    返回的数组信息格式:

      数字下标  关联键名      说明

        0                 dev       设备名

        1       ino        inode号码

        2       mode       inode保护模式

        3       nlink        被连接数目

        4       uid        所有者的用户ID

        5       gid           所有者的组ID

        6       rdev         设备类型

        7       size          文件大小的字节数

        8       atime       上次访问时间

        9       mtime       上次修改时间

        10     ctime        上次改变时间

        11     blksize      文件系统IO的块大小

        12     blocks      所占据块的数目

  fstat($handle):获取已打开的文件的属性信息,以数组形式返回信息,与函数stat()一样,但仅作用于已打开的文件而不是文件名

  fileatime($filename):返回文件上次被访问的时间,时间以Unix时间戳的方式返回,失败返回false

  filectime($filename):返回文件被创建的时间,时间以Unix时间戳的方式返回,失败返回false

  filemtime($filename):返回文件上次被修改的时间,时间以Unix时间戳的方式返回,失败返回false

  fileowner($filename):返回文件所有者的用户ID,用户ID以数字格式返回,用函数posix_getpwuid()来将其解析为用户名,失败返回false

  filegroup($filename):返回文件所属组的ID,组ID以数字格式返回,用函数posix_getgrgid()来将其解析为组名,失败返回false

  fileperms($filename):返回文件的权限模式,以数字模式返回

  filesize($filename):返回文件大小的字节数,失败返回false

  filetype($filename):返回文件类型,参数必须为路径加文件名,不能仅为单独的文件名;返回的字符串包括:fifo、char、dir、block、link、file、unknown,失败返回false

  chown($filename ,$user):改变文件的所有者,将文件$filename的所有者改成指定的用户名或用户ID,只有超级用户可以改变文件的所有者,成功返回true,失败返回false

  chgrp($filename ,$group):改变文件所属的组,将文件$filename所属的组改成指定的组名或组ID,只有超级用户可以任意修改文件所在的组,其他用户只能将文件的组改成自己所在的组,成功返回true,失败返回false

  chmod($filename ,$mode):改变文件的权限模式,成功返回true,失败返回false

    $mode:该参数由4个数字组成,第一个数字永远是0,第二个数字规定所有者的权限,第三个数字规定所有者所在组的权限,第四个数字规定其他所有人的权限

      1-执行权限,2-写权限,4-读权限  如需设置多个权限,对这三个数字相加

    例:

      chmod("test.txt",0600);  //仅所有者可读可写,其他人无任何权限

      chmod("test.txt",0644);  //所有者可读可写,所有者所在组仅可读,其他所有人也仅可读

      chmod("test.txt",0750);  //所有者拥有所有权限,所有者所在组可执行、可读,其他所有人无任何权限

  ftruncate($handle ,$size):将文件大小截为$size,成功返回true,失败返回false

七、对文件的判断

  file_exists($filename):检查文件或目录是否存在,存在返回true,否则返回false

  is_dir($filename):判断给定文件名是否是一个目录,如果文件名存在且是个目录,返回true,否则返回false

  is_file($filename):判断给定文件名是否为一个正常的文件,如果文件存在且为正常的文件则返回true,否则返回false

  is_link($filename):判断给定文件名是否为一个符号连接,如果文件存在且为一个符号连接则返回true,否则返回false

  is_readable($filename):判断给定文件是否可读,如果文件存在且可读则返回true,否则返回false

  is_writable($filename):判断给定文件是否可写,如果文件存在且可写则返回true,否则返回false

  is_executable($filename):判断文件是否可执行,如果文件存在且可执行则返回true,否则返回false

  is_uploaded_file($filename):判断文件是否是通过HTTP POST上传的,如果是则返回true,否则返回false

  getimagesize($filename):可用于检测一个文件是否真正是图片类型,若不是则返回false,若是则以索引数组的形式返回图像信息,数组共4个元素,索引0包含图像宽度的像素值,索引1包含图像高度的像素值,索引2是图像的扩展名标识,索引3是内容为“height=" " width=" "”的字符串

八、文件名与路径目录

  basename($path [,".后缀"]):返回文件全路径字符串中的文件名部分,如果指定第二个后缀参数,那么返回的文件名不包含“.”及后缀字符

  dirname($path):返回文件全路径字符串中的目录部分

    $path:若字符串$path中没有斜线,则返回点“.”表示在当前目录;否则返回去掉最后一个斜线及其后内容的字符串

    例:

      echo dirname("F:/phpEnv/php/index.php");  //F:/phpEnv/php

  pathinfo($path ,$options):返回路径下文件的信息,若指定了参数$options则返回对应信息的字符串,未指定则返回关联数组

    $options:可选参数,包含PATHINFO_DIRNAME、PATHINFO_BASENAME、PATHINFO_EXTENSION、PATHINFO_FILENAME

    例:

      $path_parts=pathinfo('/www/htdocs/inc/lib.inc.php');

      echo  $path_parts [ 'dirname' ],  "\n" ;

      echo  $path_parts [ 'basename' ],  "\n" ;

      echo  $path_parts [ 'extension' ],  "\n" ;

      echo  $path_parts [ 'filename' ],  "\n" ;

  realpath($path):将相对路径转为绝对路径,返回绝对路径字符串,失败或文件不存在时返回false

    例:echo realpath("./1.php");

  fnmatch("含通配符的匹配字段" ,$str):检查传入的字符串$str是否与指定的含通配符的匹配字段相匹配,此函数对于文件名尤其有用,但也可用于普通字符串,匹配则返回true,否则返回false

    例:

      if ( fnmatch ( "*.txt",$filename)) {
      }

  glob("含通配符的匹配字段" ,$flags):查询与设定的含通配符的匹配字段相匹配的文件路径,返回一个包含有匹配文件/目录的数组,失败返回false

    $flags:可选参数,包括:

      GLOB_MARK:在每个返回的项目中加一个斜线

      GLOB_NOSORT:按照文件在目录中出现的原始顺序返回(不排序)

      GLOB_NOCHECK:如果没有文件匹配则返回用于搜索的模式

      GLOB_NOESCAPE:反斜线不转义元字符

      GLOB_BRACE:扩充 {a,b,c} 来匹配 'a','b' 或 'c'

      GLOB_ONLYDIR:仅返回与模式匹配的目录项

      GLOB_ERR:停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

    例:

      foreach(glob("*.txt") as $filename){

        echo  "$filename"."size--".filesize($filename)."\n";

      }

九、目录的操作

  mkdir($path ,$mode ,false):新建路径目录,成功返回true,失败返回false

    $mode:可选参数,默认值为0777,表示所有用户最大访问权(可读可写可执行),该参数在Windows下被忽略

    false:可选参数,默认值,仅供创建单级目录,若要创建多级目录则该参数必须为 true

    例:

      mkdir("./demo/");  //在同路径下创建一个名为demo的目录文件夹

      mkdir("./autumn/test/demo",0777,true); 

      //在同路径下创建名为autumn的目录文件夹,在该文件夹下为test文件夹,在test文件夹中为demo文件夹

  rmdir($dirname):删除目录,该目录必须是空的且要有相应的权限,成功返回true,失败返回false

  rename($old ,$new):重命名目录名,可利用该函数将目录移动到另一路径下,成功返回true,失败返回false

  opendir($path):打开目录路径,用于之后的readdir()、rewinddir()、closedir()调用,打开成功返回目录句柄,失败返回false

  readdir($dirhandle):返回目录中的文件名,失败返回false

    例:

      if($dirhandle=opendir('/path/to/files')){

        while(false!==($file=readdir($dirhandle))){

          echo  " $file \n" ;

        }

        closedir($dirhandle);

      }

  scandir($dir ,$order):列出指定路径中的文件和目录,以索引数组的形式返回,失败返回false

    $order:可选参数,默认为按字母升序排序,设置该参数为1则按字母降序排序

    例:

      $dir='/tmp';

      $files1=scandir($dir);

      $files2=scandir($dir,1);

      print_r($files1);

      print_r($files2);

  closedir($dirhandle):关闭opendir()打开的目录句柄

  disk_free_space($str):返回系统目录或磁盘分区的可用空间,成功则返回可用字节的浮点数,失败返回false

  disk_total_space($str):返回一个系统目录的磁盘总大小,成功则返回磁盘总大小字节的浮点数,失败返回false

十、连接

  symlink("连接的目标","连接的名称"):建立符号连接,成功返回true,失败返回false

  lstat($filename):获取符号连接的属性信息,返回的信息结构和函数stat()相同,成功则以数组形式返回信息,失败返回false

  lchgrp($filename ,$group):改变符号连接所属的组,改成指定的组名或组ID,只有超级用户可以任意修改符号连接所在的组,其他用户只能将符号连接的组改成自己所在的组,成功返回true,失败返回false

  lchown($filename ,$user):改变符号连接的所有者,改成指定的用户名或用户ID,只有超级用户可以改变符号连接的所有者,成功返回true,失败返回false

  readlink($path):返回符号连接的路径内容,失败返回false

  link("要连接的目标" ,"连接的名称"):建立一个硬连接,成功返回true,失败返回false

  linkinfo("连接的路径"):获取一个连接的信息,本函数用来验证一个连接是否确实存在,成功返回lstat系统调用所返回的 UNIX C stat 结构中的 st_dev 字段,失败返回0或false

posted @ 2018-05-10 15:54  Autumn_n  阅读(422)  评论(0编辑  收藏  举报
TOP