PHP基础入门(三)

[!NOTE]

本篇文章仅用于个人交流与学习,如涉及侵权请联系站长删除!

​ 本篇文章来介绍PHP文件系统操作函数的核心用法的第一部分!

1. 文件路径处理

  1. basename($path, $suffix)

    • 返回路径中的文件名部分,参数$path为路径,可以通过参数$suffix来去掉文件的扩展名。

      1
      2
      3
      4
      5
      $oneName = basename("/testweb/home.php");
      echo $oneName; //输出为 home.php

      $twoName = basename("/testweb/home.php", ".php");
      echo $twoName; //输出为 home
  2. dirname($path, $levels)

    • 返回路径目录部分,参数$path为路径,可以通过参数$levels指定向上返回的目录层级数。

      1
      2
      3
      4
      5
      $oneName = dirname("c:/testweb/home.php");
      echo $oneName; //输出为 c:/testweb

      $twoName = dirname("c:/testweb/home.php", 2);
      echo $twoName; //输出为 c:\
  3. pathinfo($path)

    • 返回路径信息数组,包括返回路径(dirname),文件名(basename),后缀名(extension)。

      1
      2
      print_r(pathinfo("/testweb/test.txt")) 
      // 输出为Array ( [dirname] => testweb [basename] => test.txt [extension] => txt [filename] => test )

      注意:因为这里要输出信息数组,所以要使用print_r输出。

2. 文件属性修改

  1. chgrp($file, $group)

    • 修改文件所属组。

      1
      chgrp("test.txt", "www-data");
  2. chmod($file, $owner)

    • 修改文件权限(8进制模式)。

      1
      chmod("test.txt", 0664);

      注意:这里的权限表示为所有者读写,其他人只读。

  3. chown($file, $owner)

    • 修改文件所有者。

      1
      chown("test.txt", "gsy");
  4. touch($file, $time)

    • 修改访问/修改时间(默认为当前时间)。

      1
      touch("test.txt");

      注意:文件存在则更新时间,文件不存在则创建。

3.文件读写操作

  1. fopen($file, $mode)

    • 打开文件,参数$mode则是以什么样的模式打开文件。

      模式 说明
      r 只读方式打开,将文件指针指向文件头。
      r+ 读写方式打开,将文件指针指向文件头。
      w 写入方式打开,将文件指针指向文件头并将文件大小截为0,如果文件不存在则尝试创建。
      w+ 读写方式打开,将文件指针指向文件头并将文件大小截为0,如果文件不存在则尝试创建。
      a 写入方式打开,将文件指针指向文件尾,如果文件不存在则尝试创建。
      a+ 读写方式打开,将文件指针指向文件尾,如果文件不存在则尝试创建。
      x 创建并以写入方式打开,将文件指针指向文件头。如果文件已经存在,则fopen()调用失败并返回FALSE,并生成一条 E_WARNING 级别的报错信息。如果文件不存在则尝试创建。
      1
      2
      3
      $fopen = fopen('G:/phpCode/test.txt', "r"); // 以只读模式打开文件

      var_dump($fopen);// 使用var_dump()操作一下$fopen看看效果,查看输出结果,提示resource

      注意:fopen()函数返回的仅仅一个指向文件的资源句柄,而非内容本身。

  2. fwrite($handle, $data)fread($handle, $length)

    • fwrite($handle, $data)函数用于写入数据。$handle参数代表文件对象,而$data参数代表的是需要写入的数据,它的返回值是输入值字节数,并且如果需要写入的文档中已经有内容了,fwrite()函数会覆盖这些内容。

      1
      2
      3
      4
      5
      6
      $fopen = fopen('G:/phpCode/test.txt', "w"); // 以写入的方式打开文件。
      $fwrite = fwrite($fopen, "fwrite()函数使用测试"); // 调用函数fwrite()并将它赋值给变量 $fwrite。

      fclose($fopen); // 关闭文件

      print $fwrite; // 打印$fwrite变量 输出为26
    • fread($handle, $length)返回所读取的字符串,如果出错返回 FALSE$handle参数代表的是需要读取的文件对象,$length参数代表的是需要读取的字节长度。

    1
    2
    3
    4
    5
    6
    7
    $handle = fopen('G:/phpCode/test.txt', "r"); // 用读的方式打开文件

    $str = fread($handle, 100); // 用$str变量接受fread函数返回的字符串

    fclose($handle);

    print $str; // 打印字符串
  3. file_get_contents($file)file_put_contents($file, $data)

    • file_get_contents($file)可以读取整个文件到字符串,它返回的值是字符串。

      1
      echo file_get_contents('G:/phpCode/test.txt'); // 输出文件中内容
    • file_put_contents($file, $data)可以写入字符串到文件。

      1
      2
      3
      // 这里的test.txt文件中的内容为123
      $str = file_put_contents('G:/phpCode/test.txt', "hello");
      echo $str; // 输出的内容为5

      注意:file_put_contents($file, $data)函数执行两个操作:

      1. 覆盖写入文件,原本的txt文件中的内容'123'被替换为hello
      2. 返回写入的字节数。
  4. file($file)

    • file($file)函数可以读取整个函数到数组。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      /*原本txt文档中的内容为:
      abc
      def
      ghi
      jkl
      mno
      */

      print_r(file('G:/phpCode/test.txt'));
      // 输出的结果为:Array ( [0] => abc [1] => def [2] => ghi [3] => jkl [4] => mno )
  5. fgets($handle)fgetc($handle)

    • fgets($handle) 用来逐行读取文件内容。

      1
      2
      3
      4
      5
      // 首先用 fopen() 打开文件
      $file = fopen('G:/phpCode/test.txt', 'r');

      $line = fgets($file);
      echo $line; // 输出第一行内容
    • fgetc($handle)用来逐字读取文件内容。

      1
      2
      3
      4
      5
      // 首先用 fopen() 打开文件
      $file = fopen('G:/phpCode/test.txt', 'r');

      $line = fgetc($file);
      echo $line; // 输出第一个单字符
  6. 注意事项

    在文件读写操作所提到的这些函数中,有一个需要注意的地方是像:fwrite($handle, $data)fread($handle, $length)fread($handle, $length)fgets($handle)fgetc($handle)这样的函数,它们的参数使用的是文件资源(资源句柄$handle),所以在调用时,我们首先应该通过fopen()函数获得这样的资源句柄,才能保证顺利运行。

4. 文件缓存状态

  1. clearstatcache()

    • 清除文件缓存状态(修改后需要调用)。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      // 假设原来txt文件里的内容为123
      $file = 'G:/phpCode/test.txt';

      echo "初始大小:" . filesize($file) . "字节<br>"; // 初始大小输出为3。

      file_put_contents($file, "添加一些内容"); // 通过函数修改txt文件中的内容。

      echo "不清理缓存:" . filesize(file) . "字节<br>"; // 没有调用clearstatcahe()函数时 继续输出3

      clearstatcache();

      echo "清理缓存后" . filesize($file) . "字节<br>" // 清理缓存后输出的值为18
  2. filesize($file)filetype($file)

    • filesize($file)函数用来获取文件大小,并返回一个以字节为单位的大小数值,在刚刚的例子里也有体现。

    • filetype($file)函数可以获取并返回文件类型,但是它返回的是文件在操作系统中的基本类型(也称为文件模式、文件种类),而不是后最格式或文件格式。

      1
      2
      3
      $file = 'G:/phpCode/test.txt';

      echo filetype($file); // 输出的结果为file
  3. file_exists($file)is_file($file)is_dir($file)

    • file_exists($file)函数用来查找检查文件或者目录是否存在。若存在则返回TRUE,若不存在则返回FALSE

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      $file = 'G:\phpCode\test.txt'; // 此文件存在
      $iiii = 'G:\phpCode\abc.txt'; // 此文件不存在

      if (file_exists($file)) {
      echo "文件存在";
      } else {
      echo "文件不存在";
      }
      // 输出为文件存在

      if (file_exists($iiii)) {
      echo "文件存在";
      } else {
      echo "文件不存在";
      }
      // 输出为文件不存在
    • is_file($file)函数用来检查是否为文件。

      1
      is_file("test.txt");
    • is_dir($file)函数用用户来稽查是否为目录。

      1
      is_dir("test");