【PHP学习笔记(九)】操作文件与目录

查看文件和目录

查看文件名称

  • 使用basename()函数可以查看文件的名称,该函数返回文件目录中去掉路径后的文件名称
  • 语法格式:basename($path,$suffix)
  • path为必须参数,指定要检查的路径;参数suffix为可选参数,规定文件的扩展名,且此时输出时不会输出扩展名

查看目录名称

  • 使用dirname()函数可以查看目录的名称,该函数返回文件目录中去掉文件后的目录名称
  • 语法格式:dirname($path)
  • 其中$path为必须参数,指定要检查的路径

查看文件真实目录

  • 使用realpath()函数可以查看文件的真实目录,该函数返回绝对路径。它会删除所有符号连接(比如“.”、“/../”以及多余的“/”),返回绝对路径名称
  • 语法格式:realpath($path)
  • 其中$path为必需参数,指定要检查的路径。如果文件不存在,则返回false

查看文件信息

查看文件的类型

  • 使用filetype()函数可以获取文件的类型。可能返回值有fifo、char、dir、block、link、file和unknown
  • 语法格式:filetype($filename)
  • 其中$filename为必需参数,指定要检查的文件路径。如果查看失败,则返回false

查看文件的访问和修改时间

  • 使用fileatime()函数可以获取文件上次访问时间
    • 语法格式:fileatime($filename)
    • 其中参数$filename为必需参数,指定要检查的文件名称。如果查看失败,则返回false
  • 使用filetime()函数可以获取文件上次被修改的时间
    • 语法格式:filetime($filename)
    • 其中参数$filename为必需参数,指定要检查的文件名称。如果查看失败,则返回false

文件操作

打开文件和关闭文件

  • fopen()函数可以打开文件
    • 语法格式:fopen($filename,$mode)
    • 其中参数$filename为必需参数,指定要打开的文件名称。参数$mode为打开文件的方式
    • mode的取值
      • ‘r’ 只读方式打开,将文件指针指向文件头。
      • ‘r+’ 读写方式打开,将文件指针指向文件头。
      • ‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
      • ‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
      • ‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
      • ‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
      • ‘x’ 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
      • ‘x+’ 创建并以读写方式打开,其他的行为和 ‘x’ 一样。
  • 文件操作完成后,需要关闭文件,释放资源。关闭文件使用fclose()函数
    • 语法格式:bool fclose(resource handle)
    • 其中参数handle为已经打开文件的资源对象。如果handle无效,则返回false

读取文件

  • 打开文件后,即可读取文件的内容,PHP提供了很多读取文件的方式
    • 逐行读取文件
      • fgets()函数用于从文件中逐行读取文件
      • 语法格式:fgets ( resource $handle [, int $length ] )
      • handle参数为文件指针,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。length参数表示从 handle 指向的文件中读取一行并返回长度最多为 length – 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length – 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
      • 例如:
      $file=fopen("test.txt,"r") or exit("无法打开文件");
       //读取文件每一行,直到文件结尾
      while(!feof($file)){
       echo fgets($file). "<br/>";
         }
      fclose($file);//关闭文件
      
      • 上述范例使用feof()函数,该函数的作用为检查是否已经到文件的末尾(EOF)。在循环遍历未知长度的数据时,feof()函数很有用
    • 逐字符读取文件
      • fgetc()函数用于从文件中逐字符地读取文件
      • 语法格式:fgetc ( resource $handle )
      • handle参数为文件指针且必须是有效的,必须指向由 fopen() 或 fsockopen() 成功打开的文件(并还未由 fclose() 关闭)。
      • 例如:
        $file=fopen("test.txt,"r") or exit("无法打开文件");
        //读取文件每一行,直到文件结尾
        while(!feof($file)){
        echo fgetc($file). "<br/>";
        }
        fclose($file);//关闭文件
        
    • 读取整个文件的内容
      • readfile()函数
        • 语法格式:readfile ( string $filename [, bool $use_include_path = false [, resource $context ]] )
        • filename参数为要读取的文件名。use_include_path为想要在 include_path 中搜索文件,可使用这个可选的第二个参数,设为 TRUE。context参数为Stream 上下文(context) resource。
      • file()函数
        • 语法格式:file ( string $filename [, int $flags = 0 [, resource $context ]] )
        • filename参数为文件的路径。context参数为Stream 上下文(context) resource。
        • flags参数可以是一个或多个常量,默认为0
          • FILE_USE_INCLUDE_PATH
            • 在 include_path 中查找文件。
          • FILE_IGNORE_NEW_LINES
            • 在数组每个元素的末尾不要添加换行符
          • FILE_SKIP_EMPTY_LINES
            • 跳过空行
      • file_get_content()函数
        • 和 file() 一样,只除了 file_get_contents() 把文件读入一个字符串。将在参数 offset 所指定的位置开始读取长度为 maxlen 的内容。如果失败,file_get_contents() 将返回 FALSE。file_get_contents() 函数是用来将文件的内容读入到一个字符串中的首选方法。如果操作系统支持还会使用内存映射技术来增强性能。
        • 语法格式:file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
      • 范例
      $file="test.txt";
      
      readfile($file);
      echo "<hr/>";
      
       $farr=file($file);
      foreach($farr as $v){
       echo $v."<br/>";
      }
      echo "<hr/>";
      
      echo file_get_contents($file);
      

文件数据写入

  • fwrite()函数
    • 语法格式:fwrite(file, string length)
    • 其中file为必需参数,指定要写入的文件。如果文件不存在,则创建一个新文件。string为必需参数,指定要写入文件的字符串。length为可选参数,指定要写入的最大字节数
  • file_put_content()函数
    • 语法格式:file_put_contents(file,data,mode,context)
    • 其中file为必需参数,指定要写入的文件。如果文件不存在,则创建一个新文件。data为可选参数,指定要写入文件的数据。可以使字符串、数组或数据流。mode为可选参数,指定如何打开/写入文件。context为可选参,规定文件句柄的环境
  • 例如:
$file="gushi.txt";
$str="要写入的字符串一。";
//使用fwrite()函数写入文件
$fp=fopen($file,"wb") or die ("打开文件错误!");
fwrite($fp,$str);
fclose($fp);
readfile($file);
echo "<hr/>";

$str="要追加的字符串二。";
//使用file_put_contents()函数追加内容
file_put_contents($file,$str,FILE_APPEND);
readfile($file);

重命名和移动文件

  • rename()函数可以重命名文件或目录。成功返回true,不成功返回false;
  • 语法格式:rename(oldname,newname[,context])
  • oldname和newname分别表示原来的和需要修改的文件或目录名。context为可选参数,规定文件句柄的环境
  • 如果源文件和目标文件路径相同,可以实现文件的重命名;如果源文件和目标文件不相同,可以实现移动文件效果

复制文件

  • 使用copy()函数即可以复制文件
  • 语法格式:copy(source,destination)
  • source参数表示要复制的文件,destinatio参数复制文件的目的地

删除文件

  • 使用unlink()函数可以删除文件
  • 语法格式:unlink(filename)
  • 其中filename用于指定需要删除的文件

目录操作

getcwd(void):string

  • 获取当前的工作目录,返回的是字符串

scandir(string directory[, int sorting_order]):array

  • 该函数返回一个array,包含有directory中的文件和目录。如果directory不是一个目录,则返回布尔值false,并产生一条E_WARNING级别的错误。在默认情况下,返回值是按照字母顺序升序排列的。如果使用了sorting_order(设为1),则按照字母顺序排列

dir(string directory)

  • 此函数模仿面向对象机制,将指定的目录名转换为一个对象并返回
  • 使用方法
class dir{
dir (string directory)
string path
resource handle
string read(void)
void rewind(void)
void close(void)
}
  • 其中handle属性含义为目录句柄;path属性的含义为打开目录的路径;函数read(void)的含义读取目录;函数rewind(void)的含义为复位目录;函数close(void)的含义为关闭目录

chdir(string directory)

  • 此函数将PHP的当前目录改为directory

closedir(resource dir_handle)

  • 此函数主要是关闭由dir_handle指定的目录流,目录流必须依据被opendir()打开

opendir(string path)

  • 返回一个目录句柄。其中path为要打开的目录路径。如果path不是一个合法的目录或因为权限限制或文件系统错误而不能打开目录,返回false并产生一个E_WARNING级别的PHP错误

readdir(resource dir_handle):string

  • 该函数主要是返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回
  • 例如:
if ($handle=opendir("C:/../www/test/")){
  echo "Directory handle:$handle\n";
  echo "File:\n";
//正确的遍历目录方法
while(false !== ($file= readdir($handle))){
 echo "$file\n";
}
closedir($handle);
}
//错误的遍历目录方法
while($file= readdir($handle)){
 echo "$file\n";
}

上传文件

在网络上,用户可以上传自己的文件。实现这种功能的方法很多,用户把一个文件上传到服务器,需要在客户端和服务器端建立一个通道来传递文件的字节流,并在服务器进行上传操作

全局变量$_FILES

  • 使用这个全局变量,用过可以从客户计算机向远处服务器上传文件。这个全局变量是一个二维数组,用于接收上传文件的信息,它会保存表单中type值为file的提交信息
  • 提交信息有5个主要列,分别为
    • $_FILES[“file”][“name”]:存放上传文件的名称
    • $_FILES[“file”][“type”]:存放上传文件的类型
    • $_FILES[“file”][“size”]:存放上传文件的大小,以字节为单位
    • $_FILES[“file”][“tmp_name”]:存放存储在服务器的文件的临时全路径
      • /tmp目录默认的上传临时文件的存放地点,此时用户必须将文件从临时目录中删除或移动到其它位置,否则上传的文件会被自动删除。可见无论上传是否成功,程序最好都会自动删除临时目录中的文件,所以在删除前,需要将上传的文件复制到其他位置,这样才算真正完成了上传文件的过程
    • $_FILES[“file”][“error”]:存放文件上传导致的错误代码
      • UPLOAD_ERR_OK=0:表示没有错误
      • UPLOAD_ERR_INT_SIZE=1:表示上传文件的大小超过了约定值
      • UPLOAD_ERR_FORM_SIZE=2:表示上传文件的大小超过了HTML表单隐藏域属性的MAX_FILE_SIZE元素所规定的最大值
      • UPLOAD_ERR_PARTIAL=3:表示文件只被部分上传
      • UPLOAD_ERR_NO_FILE=4:表示没有上传任何文件

文件上传

  • 使用move_uploaded_file()函数可以将上传移动到新位置
  • 语法格式:move_uploaded_file(file,newloc)
  • 其中file为需要移动的文件;newloc参数为文件的新位置。如果file指定的上传文件时合法的,则文件被移动到newloc指定的位置;如果file指定的上传文件不合法,则不会出现任何操作,move_uploaded_file()函数将返回false;如果file指定的上传文件是合法的,但出于某些原因无法移动,不会出现任何操作,move_uploaded_file()函数将返回false,此外还会发出一条警告
  • 此函数只能用于通过HTTP POST上传的文件。如果目标已经存在,将会被覆盖

人已赞赏
PHP编程语言

【PHP学习笔记(八)】错误处理和异常处理

2020-3-30 15:40:13

PHP编程语言

【PHP学习笔记(十)】Cookie和会话管理

2020-4-1 16:53:55

2 条回复 A文章作者 M管理员
  1. kukuma

    点点赞赏,手留余香

  2. Hanscom

    点点赞赏,手留余香

个人中心
今日签到
有新私信 私信列表
搜索