51、PHP 原生魅力 - 文件操作 - 将文件读入数组

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 149

时间: 2024-10-17 10:39:08

file():读取文件内容到数组中

如果你想读取一个文件,可以使用 file() 函数。它会将文件内容放入一个数组中,让您能够逐行处理或作为列表处理。假设您有一个文本 (.txt) 文件,其中包含国家列表,并且您需要显示这个列表,可以使用 file() 函数来读取文件并将其转换为数组。

下面是一个示例:

<?php

$countries = file('countries.txt');

print_r($countries);

输出如下:

$ php 51-file.php 
Array
(
    [0] => PHP

    [1] => Laravel
)

file() 函数参数

file 函数有三个参数作为参数传递。

file ( $filename , $flags , $context )
  • $filename: 文件路径。
  • $flags: 是一个可选参数,可以是以下常量中的一个或多个,用于控制文件读取的行为。
  • $context: 允许您为文件句柄指定一个上下文,这主要用于高级操作,如设置超时、HTTP 头部等。

以下是与file()函数相关的文件常量:

  1. FILE_USE_INCLUDE_PATH: 如果开启此标志,并且文件在当前目录中未找到,PHP 将会搜索 include 路径来查找文件。
  2. FILE_IGNORE_NEW_LINES: 使用此标志会去除文件中每一行末尾的换行符(\n),这样数组中的每个元素就不包含换行符了。
  3. FILE_SKIP_EMPTY_LINES: 当开启此标志时,空行(只含有换行符的行)会被忽略,不会包含在返回的数组中。
  4. FILE_TEXT: 在 Windows 系统下使用,指示文件为文本文件。通常用于区分文本文件和二进制文件的读取方式。
  5. FILE_BINARY: 同样是在 Windows 系统下使用,指示文件为二进制文件。在大多数情况下,默认就是二进制模式,此常量主要为了与fopen()的模式保持一致。

在实际应用中,根据需要选择合适的常量组合,以控制文件读取的具体行为。

添加选项和上下文

<?php

// 获取当前 PHP 文件的内容 
print_r(file(__FILE__));

// 你还可以检索远程文件
print_r(file('https://cdn.wsform.com/wp-content/uploads/2020/06/color_web_safe.csv'));

// 如果你需要设置一些头,你可以使用“上下文”
$opts = [
    'http' => [
        'method' => "GET",
        'header' => "Accept-language: en\r\n" .
            "Cookie: foo=bar\r\n"
    ]
];
$context = stream_context_create($opts);
print_r(file(
    filename: 'https://cdn.wsform.com/wp-content/uploads/2020/06/color_web_safe.csv',
    context: $context
));

file()函数可以处理多种文件类型,包括但不限于:

  • 文本文件 (*.txt):这类文件包含纯文本,无格式的内容。
  • CSV文件 (*.csv):逗号分隔值文件,用于存储表格数据。
  • HTML文件 (*.html, *.htm):这类文件包含HTML标记,可以被读入数组中。
  • XML文件 (*.xml):以XML格式存储结构化数据的文件。
  • 日志文件 (*.log):基于文本的文件,用来记录事件或消息。
  • 配置文件 (*.config, *.ini等):存储特定格式配置数据的文件。

实际上,文件扩展名并不是file()函数处理能力的限制因素。一般来说,它可以读取任何基于文本的文件。然而,如果文件包含二进制数据或非文本数据,使用file()函数读取的结果可能不会如预期,甚至可能导致乱码或错误。对于二进制文件或需要特殊解析的文件类型(如图片、音频、视频等),应考虑使用更适合的函数或方法来处理。

请登录后再评论