• php文件操作


    一、文件读取的5种方法

    1,file_get_contents: 将整个文件读入一个字符串

    file_get_contents(
    string $filename,
    bool $use_include_path = false,
    ?resource $context = null,
    int $offset = 0,
    ?int $length = null
    ): string|false

    • 可以读取本地的文件
    • 也可以用来打开一个网络地址实现简单的网页抓取
    • 可以模拟post请求(stream_context_create)
    $fileName = 'test.txt';
    if (file_exists($fileName)) {
        $str = file_get_contents($fileName);
        echo $str;
    } else {
        print_r("文件不存在");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    2,file: 把整个文件读入一个数组中

    file(string $filename, int $flags = 0, ?resource $context = null): array|false

    • 数组的每个元素对应于文件中的一行
    • 可以读取本地的文件
    • 也可以用来读取一个网络文件
    $lines = file('test.txt'); 
    foreach ($lines as $line_num => $line) {
        echo "Line #{$line_num} : " . htmlspecialchars($line) . "
    \n"
    ; }
    • 1
    • 2
    • 3
    • 4
    3,file_open、file_gets、file_read、fclose: 从文件指针资源读取

    3.1 fgets — 从文件指针中读取一行

    fgets(resource $stream, ?int $length = null): string|false

    从文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

    $fp = fopen("test.txt", "r");
    if ($fp) {
        while (!feof($fp)) {
            $line = fgets($fp);
            echo $line . "
    \n"
    ; } fclose($fp); }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.2 fread — 从文件指针中读取固定长度(可安全用于二进制文件)

    fread(resource $stream, int $length): string|false

    $fp = fopen("test.txt", "r");
    if ($fp) {
        $content = "";
        while (!feof($fp)) {
            $content .= fread($fp, 1024);
        }
        #$contents = fread($handle, filesize($filename));
        echo $content;
        fclose($fp);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    4,SplFileObject 类

    https://www.php.net/manual/zh/class.splfileobject.php

    5,调用linux命令

    处理超大文件,比如日志文件时,可以用fseek函数定位,也可以调用linux命令处理

    $file = 'access.log';
    $file = escapeshellarg($file); // 对命令行参数进行安全转义
    $line = `tail -n 1 $file`;
    echo $line;
    
    • 1
    • 2
    • 3
    • 4

    二、文件写入

    1,file_put_contents: 将数据写入文件

    file_put_contents(
    string $filename,
    mixed $data,
    int $flags = 0,
    ?resource $context = null
    ): int|false

    $content = "Hello, world!"; // 要写入文件的内容
    $file = "test.txt"; // 文件路径
    
    file_put_contents($file, $content);
    
    • 1
    • 2
    • 3
    • 4
    2,fwrite: 写入文件(可安全用于二进制文件)

    fwrite(resource $stream, string $data, ?int $length = null): int|false

    $content = "这是要写入文件的内容";
    $file = fopen("test.txt", "w"); // 打开文件写入模式
    if ($file) {
        fwrite($file, $content); // 将内容写入文件
        fclose($file); // 关闭文件
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3,SplFileObject 类

    三、文件复制、删除、重命名

    1,copy: 拷贝文件

    copy(string $from, string $to, ?resource $context = null): bool

    $file = 'test.txt';
    $newFile = 'test2.txt';
    
    if (!copy($file, $newFile)) {
        echo "failed to copy $file...\n";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    2,unlink: 删除文件

    unlink(string $filename, ?resource $context = null): bool

    $fileName = 'test2.txt';
    if (file_exists($fileName)) {
       if (unlink($fileName)) {
           echo '删除成功';
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    3,rename: 重命名文件

    rename(string $from, string $to, ?resource $context = null): bool

    • 可以在不同目录间移动
    • 如果重命名文件时 to 已经存在,将会覆盖掉它
    • 如果重命名文件夹时 to 已经存在,本函数将导致一个警告
    $fileName = 'test.txt';
    $rename = 'test_new.txt';
    if (file_exists($fileName)) {
       if (rename($fileName, $rename )) {
           echo '重命名成功';
       }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    VirtualLab教程特辑
    Python的def __init__( ):函数
    vue项目vant sku组建满足自定义展示
    OpenAI 超 700 名员工联名逼宫董事会;ChatGPT 新功能“阅后即焚”丨 RTE 开发者日报 Vol.89
    Flutter启动页
    网络安全(黑客)自学路线
    JAVA高级教程-Java Map(6)
    Centos7快速安装跳板机jumpserver
    空间复杂度
    JUC并发工具-CAS机制
  • 原文地址:https://blog.csdn.net/bt_xxx/article/details/136597664