如何使用PHP读取文件的6种方法
总结了用PHP读取文件的方法。试着用6种方法读入文件:file函数 readfile函数 file_get_contents函数 SplFileObject类 fread函数 fgets函数
用file函数读取文件
尝试使用file函数读取文件内容。
用file函数读取的话,读取的文件会作为数组返回。
PHP
<?php
$contents = file("zzzyk.txt");
foreach ($contents as $number => $content) {
$fileNumber = $number + 1;
echo "{$fileNumber}: " . $content;
}
使用file函数读取了文件。
传递给file函数的是文件的路径。
将文件的路径传递给对方,对方会读取文件并将其排列后返回。(换行的时候就这样。)
返回的文件的内容的排列用foreach语句旋转显示。
$number变量是数组的关键。因为有从0开始的值,所以作为行号使用。
$content变量会一行一行地输入读取的文件内容。
因为$number变量是从0开始的,所以加上1,作为从1开始的行号。
这次我们读取的是本地的文件,也可以指定URL使用Web上的文件。
操作检查
如下准备文件并检查操作。
PHP
测试PHP文件读取
导入文本文件
Hello, World!
然后输出就像这样带有行号。
我能够确认它是逐行读取的。
PHP
1: 测试PHP文件读取
2: 导入文本文件
3: Hello, World!
如何使用PHP读取文件的6种方法
使用 readfile 函数读取
使用 readfile 函数读取文件的内容。
readfile 函数是一个读取文件并立即将其写入标准输出的函数。
PHP
<?php
readfile("zzzyk.txt");
执行时,文件的内容被写入标准输出。
如果你在控制台运行它,文件的内容将原样输出到控制台。
readfile 函数用于在网络上下载文件。
如果你这样写,你访问PHP文件的时候就可以下载任何文件了。
这次,我尝试下载图像文件“test.png”文件。
PHP
<?php
$image = 'test.png';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: 0");
header('Content-Disposition: attachment; filename="'.basename($image).'"');
header('Content-Length: ' . filesize($image));
header('Pragma: public');
readfile($image);
使用 file_get_contents 函数读取
尝试使用 file_get_contents 函数读取文件的内容。
file_get_contents 函数读取文件并将其作为字符串返回。
PHP
<?php
$contents = file_get_contents("zzzyk.txt");
var_dump($contents);
传递的文件路径的内容作为字符串返回到 $contents 变量。
我使用 var_dump 函数输出 $contents 变量的内容。
这次我指定了一个本地文件路径,但您也可以指定一个 URL。
操作检查
如下准备文件并检查操作。
PHP
测试PHP文件读取
导入文本文件
Hello, World!
然后,我可以确认字符串是这样返回的。
PHP
string(56) "测试PHP文件读取 导入文本文件 Hello, World!"
使用 SplFileObject 类读取
尝试使用 SplFileObject 类读取文件的内容。如果您指定
SplFileObject 类的文件路径,它将返回一个文件对象。
PHP
<?php
$file = new SplFileObject("zzzyk.txt");
foreach ($file as $number => $content) {
$fileNumber = $number + 1;
echo "{$fileNumber}: " . $content;
}
当您新建 SplFileObject 时,将文件路径传递给构造函数。
这将返回一个文件对象。
我们正在接收 $file 变量中返回的文件对象。
通过将它传递给 foreach 语句,它可以像数组一样使用。
由于 $number 变量存储了一个从 0 开始的数字,它将被用作行号。
$content 变量逐行包含加载文件的内容。
SplFileObject 类还可以使用 setFlags 方法跳过空行。
还有读取CSV文件的设置,所以我觉得读取CSV文件的时候用这个类会很好。
操作检查
如下准备文件并检查操作。
PHP
测试PHP文件读取
导入文本文件
Hello, World!
然后结果类似于文件功能。
我能够确认它是逐行读取的。
PHP
1: 测试PHP文件读取
2: 导入文本文件
3: Hello, World!
使用 fread 函数读取
使用 fread 函数读取文件。
通过fopen函数访问文件后即可使用。以字符串的形式获取文件的内容。
PHP
<?php
$filePath = "zzzyk.txt";
$handle = fopen($filePath, "r");
$contents = fread($handle, filesize($filePath));
var_dump($contents);
fclose($handle);
首先,在 $filePath 变量中指定要读取的文件路径。
我正在使用 fopen 函数打开文件。
文件路径作为第一个参数传递,模式设置为第二个参数。
由于为模式设置了“r”,因此将读取它。
由于返回了文件的资源类型,因此它存储在 $handle 变量中。
在接下来的过程中,使用 fread 函数读取文件的内容。
第一个参数指定先前获得的资源类型的 $handle 变量。
第二个参数指定要读取的文件的大小。它是通过将文件路径传递给 filesize 函数获得的。
加载文件的内容在 $contents 变量中接收。
var_dump 函数输出变量的内容。
最后,使用 fclose 关闭文件以结束进程。
您传递的是打开文件的资源。
操作检查
如下准备文件并检查操作。
PHP
测试PHP文件读取
导入文本文件
Hello, World!
这将给出与 file_get_contents 函数类似的结果。
确认可以以字符串形式获取文件内容。
PHP
string(56) "测试PHP文件读取 导入文本文件 Hello, World!"
使用 fgets 函数读取
使用 fgets 函数读取文件。
这也在使用 fopen 函数访问文件后使用。
通过使用 fgets 函数,可以像文件函数一样读取和处理每一行。
PHP
<?php
$filePath = "zzzyk.txt";
$handle = fopen($filePath, "r");
$number = 1;
while ($line = fgets($handle)) {
echo "第{$number}行: " . $line;
$number += 1;
}
fclose($handle);
首先,在 $filePath 变量中指定要读取的文件路径。
我正在使用 fopen 函数打开文件。
文件路径作为第一个参数传递,模式设置为第二个参数。
$handle 将返回文件资源。
在下一行中,我们提供了一个 $number 变量用于行号。
我正在使用 while 语句逐行读取文件的内容。
我们传递给 fgets 函数的是我们得到的资源类型的 $handle 变量。
我们将文件的内容逐行存储在 $line 变量中,直到文件的内容被读取。
在循环处理中,我打印出了文件的行号和内容。
最后,fclose 关闭文件并终止进程。
操作检查
如下准备文件并检查操作。
PHP
测试PHP文件读取
导入文本文件
Hello, World!
这样的话,就会得到和file函数相同的结果。
一行一行地处理,连同行号一起输出文件的内容。
PHP
第1行: 测试PHP文件读取
第2行: 导入文本文件
第3行: Hello, World!
6种文件读取方式总结
下表总结了本次介绍的文件读取方式。
函数/类 内容
file 逐行读取文件
readfile 读取文件并立即写入标准输出
file_get_contents 将整个文件作为字符串读取
SplFileObject 使用类,以行为单位读取
fread 使用fopen函数获取的资源,用字符串读取文件
fgets 使用fopen函数获取的资源,以行为单位读取文件
如果想方便阅读,用file_get_contents函数和file函数好像也不错。
当以字符串形式批量读取时,我使用了 file_get_contents 函数,而当以行为单位读取时,我使用了file函数。
让我们在下载过程中使用 readfile 函数。