zoukankan      html  css  js  c++  java
  • 文件处理函数

    一、文件的创建与删除

      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 %s %s ")){
              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' ],  " " ;

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

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

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

      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)." ";

          }

    九、目录的操作

      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 " ;

            }

            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

  • 相关阅读:
    bzoj2763: [JLOI2011]飞行路线(分层图spfa)
    8.20noip模拟题
    8.19noip模拟题
    1046: [HAOI2007]上升序列(dp)
    bzoj1079: [SCOI2008]着色方案(dp)
    逆序对
    P1966 火柴排队(逆序对)
    NOIP 2015 DAY2
    8.15学校模拟
    差分
  • 原文地址:https://www.cnblogs.com/zhouwanqiu/p/9020080.html
Copyright © 2011-2022 走看看