11.文件处理


文件处理

1. 文件系统的相关操作

  1. 什么是文件操作系统
  • 文件操作系统只是PHP知识的一个完整的模块
  • 所有文件进行操作都需要文件系统的相关操作函数
  • 就是学习操作文件的相关函数
  1. 与文件相关的函数

(PS: ./ : 当前目录; ../ : 上一级目录 / : 下一级目录)

  1. 创建文件: touch() (如果文件不存在则会创建文件,如果存在则会更新修改时间)

    image-20220415190950815

    1. **复制文件: ** copy('原路径', '目标路径')

    image-20220415191917454

  2. 移动文件 重命名: rename()

    // 重命名
    rename('./oldname.txt', './newname.txt');
    // 移动
    rename('./oldname.txt', '../oldname.txt');
    

    image-20220415193024564

    1. 删除文件: unlink()

    image-20220415193143745

  3. 获取文件大小: filesize()

    image-20220415194106774

  4. 判断是否是文件: is_file()

    image-20220415194357607

  5. 判断文件或目录是否存在 : file_exists()

    image-20220415194750103

  6. 文件是否可执行 is_executable()

  7. 文件是否可读is_readable()

  8. 文件是否可读写is_writable()

  9. 获取文件创建时间filectime()

    image-20220415223135586

  10. 获取文件修改时间filemtime()

    image-20220415223250244

  11. 获取文件上次访问的时间fileatime()

    image-20220415223357875

  12. 打开文件 fopen()

 fopen();
 // @paramt1 要代开的文件位置
 // @parmat2 打开的方式
 // 返回值: 资源 resource 
 // fopen() 将文件资源绑定到一个流上。 
  1. 读取文件 fread()

一个汉字占三字节

 fread();
 // 他会保留上次读取的位置,下次再从那里读
 // 要'打开'文件获得资源流
 // @paramt1 读取的资源流
 // @paramt2 要读取的字节数
 // 返回值 返回读到的内容,如果读到最后返回空字符串
  1. 测试文件指针是否到了结尾 feof()

image-20220415230146688

freadfeof结合读取文件

 // 先打开文件
 $file = fopen('./te1xt.txt', 'r');
 // 定义一个用来接收结果
 $count= '';
 // 根据指针判断是否到结尾
 while(!feof($file)){
     // 拼接字符串
     $count .= fread($file, 1);
 };
 echo $count;
  1. 读取文件的一行 fgets()

image-20220415231610068

 // 先打开文件
 $file = fopen('./te1xt.txt', 'r');
 // 根据指针判断是否到结尾
 while (!feof($file)) {
     // 一行一行拼接
     // 浏览器中只有<br/>标签可以换行
     echo fgets($file) . '<br/>';  // 手动换行用于看出每行
 };
 fclose($file);
  1. 关闭文件 fcloce()

关闭是为了节省资源

 // @parma1 要关闭的资源
  1. 打开—读取—关闭 一步到位 file_get_contents(要操作的文件)

返回值 : 将整个文件读入一个字符串

  1. **写入文件 fwrite() **

    • 需要配合 fopen()使用

    • fopen()的第二个参数为 w 时为覆盖

    • fopen()的第二个参数为 a时为追加

    • image-20220416204810248

    • image-20220416205559202

    • @parmat1 要写入的资源

    • @parmat2 要写入的内容

    • 返回值 写入的字节数(int类型)

      // 打开文件
      $file = fopen('./b.txt', 'w');  // w 写入文件的方式 如果文件存不存在,则会自动创建
      // 写入文件 
      fwrite($file, 'Hello Worlod');
      // 关闭文件
      fclose($file);
      
19. **写入文件一步到位 `file_put_sontents()`**

image-20220416204209740

当第三个可选参数flags为FILE_APPEND 的时候为追加数据而不是覆盖

image-20220416204336552

  1. 文件的读写锁 flock()
  • image-20220416210001270

  •   // 打开文件
      $file = fopen('./b.txt', 'r');  
      // 读取文件
           //文件加锁
      $result =  flock($file, LOCK_SH);
      var_dump($result);  // 加锁成功返回 true
      while(!feof($file)) {
          echo fgets($file) . "/n";
      };
          //释放 解锁
      $Nresult = flock($file, LOCK_UN);
      var_dump($Nresult);  // 解锁成功返回true
      // 关闭文件
      fclose($file);
    

2. 生成器yield

  • 优点

    • 生成器会对PHP应用的性能有非常大的影响
    • PHP代码运行时节省大量的内存
    • 比较适合计算大量的数据
  • 生成器的执行过程

    • function demo(int $num) {
          for($i = 0; $i < $num; $i++) {
              yield time();
          };
      };
      $result = demo(10);
      foreach($result as $value) {
          sleep(1);  // 延迟一秒在执行下边的文件
          echo $value . "<br/>";
      }
      
    • image-20220416213559359

  • 系统函数sleep()

    • image-20220416213715919
  • 使用生成器读取文件

    function readTxt(){
        //打开文件
        $files = fopen('b.txt', 'r');
        //读取文件
        while(!feof($files)) {
            yield fgets($files);     
        }
        // 关闭文件
        fclose($files);
    }
    $content = readTxt();
    foreach($content as $value) {
        echo $value."<br/>";
    }
    

原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/244689.html

(0)
上一篇 2022年4月17日
下一篇 2022年4月17日

相关推荐

发表回复

登录后才能评论