Php 简明教程
PHP - Read File
PHP 中有许多选项可用于读取已使用 fopen() 函数打开的文件中的数据。PHP 库中的以下内置函数可以帮助我们执行读取操作 −
-
fgets() − 从文件指针获取一行。
-
fgetc() − 从文件指针返回一个包含单个字符的字符串。
-
fread() − 从文件指针读取指定数量的字节。
-
fscanf() − 从文件中读取数据,并按照指定格式对其进行解析。
The fgets() Function
fgets() 函数可以从一个打开的文件中返回一行。此函数停止在指定长度的新行或 EOF 处返回,以先遇到的为准,并在失败时返回 false 。
fgets(resource $stream, ?int $length = null): string|false
此处, $stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄,而 $length 是指定要读取的字节数的可选参数。
当读取到“length-1”个字节或遇到新行时,读取操作结束,以先遇到的为准。
The fgetc() Function
fgetc() 函数返回从文件句柄当前位置读取的单个字符。遇到 EOF 时,它返回 false 。
fgetc(resource $stream): string|false
此处, $stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄。
The fread() Function
PHP 中的 fread() 函数是用于从文件读取数据的二进制安全函数。虽然 fgets() 函数仅从文本文件中读取,但 fread() 函数可以以二进制模式读取文件。
fread(resource $stream, int $length): string|false
此处, $stream 参数是使用 fopen() 函数以二进制读取或读/写模式( rb 或 rb+ )打开的文件的文件指针或句柄。 $length 参数指定要读取的字节数。
如果未给出 $length 参数,PHP 将尝试读取整个文件,直到到达 EOF,但需符合指定的块大小。
The fscanf() Function
PHP 中的 fscanf() 函数从文件流中读取输入并根据特定格式对其进行解析,从而将其转换为指定类型的变量。每次调用此函数都将从文件中读取一行。
fscanf(resource $stream, string $format, mixed &...$vars): array|int|false|null
此处, $stream 参数是指针,它指向使用 fopen() 函数打开的文件,且为读取模式。同时, $format 为一个字符串,包含下列一个或多个格式说明符 −
-
%% − 返回一个百分比
-
%b − Binary number
-
%c − 根据 ASCII 值设置字符
-
%f − Floating-point number
-
%F − Floating-point number
-
%o − Octal number
-
%s − String
-
%d − 有符号十进制数
-
%e − Scientific notation
-
%u − 无符号十进制数
-
%x − 小写字母十六进制数
-
%X − 大写字母十六进制数
$vars 是一个可选参数,它通过引用指定包含解析值的变量。
假设“employees.txt”文件在与下方 PHP 脚本相同的目录中。文本文件中每一行都有每个员工的 name, email, post 和 salary ,由制表符分隔。
Example
以下 PHP 脚本使用 fscanf() 函数中的格式说明符读取文件 −
<?php
$fp = fopen("employees.txt", "r");
while ($employee_info = fscanf($fp, "%s\t%s\t%s\t%d\n")) {
list ($name, $email, $post, $salary) = $employee_info;
echo "<b>Name</b>: $name <b>Email</b>:
$email <b>Salary</b>: Rs. $salary <br>";
}
fclose($fp);
?>
它将生成以下 output −
Name: Ravishankar Email: ravi@gmail.com Salary: Rs. 40000
Name: Kavita Email: kavita@hotmail.com Salary: Rs. 25000
Name: Nandkumar Email: nandu@example.com Salary: Rs. 30000