PHP 有许多选项可用于从使用 fopen() 函数打开的文件中读取数据。PHP 库中的以下内置函数可以帮助我们执行读取操作 -
- fgets() − 从文件指针获取一行。
- fgetc() − 从文件指针返回一个带有单个字符的字符串。
- fread() − 从文件指针中读取指定数量的字节。
- fscanf() − 从文件中读取数据并按照指定的格式进行解析。
fgets() 函数
fgets() 函数可以从打开的文件中返回一行。此函数停止返回指定长度或 EOF 的新行,以先到者为准,并在失败时返回 false。
fgets(resource $stream, ?int $length = null): string|false
此处,$stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄,$length 是指定要读取的字节数的可选参数。
当读取 “length-1” 字节或遇到换行符时,读取操作结束,以先到者为准。
示例
以下代码从 “hello.txt” 文件中读取第一个可用行 -
<?php
$file = fopen("hello.txt", "r");
$str = fgets($file);
echo $str;
fclose($file);
?>
它将产生以下输出 -
示例
您可以将 fgets() 函数放在一个循环中以读取文件,直到到达文件末尾。
<?php
$file = fopen("hello.txt", "r");
while(! feof($file)) {
echo fgets($file). "<br>";
}
fclose($file);
?>
它将产生以下输出 -
启科普在线教程
PHP 教程
在这里,我们使用了 feof() 函数,如果文件指针位于 EOF,则返回 true,否则返回 false。
fgetc() 函数
fgetc() 函数返回从文件句柄的当前位置读取的单个字符。遇到 EOF 时,它将返回 false。
fgetc(resource $stream): string|false
此处,$stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄。
示例以下代码显示从 “hello.txt” 文件中读取的第一个字符 −
<?php
$file = fopen("hello.txt", "r");
$str = fgets($file);
echo $str;
fclose($file);
?>
它将产生以下输出 -
示例
您还可以将 fgetc() 函数放在循环中,以逐个字符读取文件,直到它到达 EOF。
<?php
$file = fopen("hello.txt", "r");
while(! feof($file)) {
$char = fgetc($file);
if ($char == "\n")
echo "<br>";
echo $char;
}
fclose($file);
?>
它将产生以下输出 -
启科普在线教程
PHP 教程
fread() 函数
PHP 中的 fread() 函数是一个二进制安全函数,用于从文件中读取数据。fgets() 函数仅从文本文件中读取数据,而 fread() 函数可以在二进制模式下读取文件。
fread(resource $stream, int $length): string|false
此处,$stream 参数是使用二进制读取或读/写模式( rb 或 rb+ )的 fopen() 函数打开的文件的文件指针或句柄。$length 参数指定要读取的字节数。
如果未给出 $length 参数,PHP 将尝试读取整个文件,直到达到 EOF,具体取决于指定的块大小。
示例
以下代码读取文本文件 -
<?php
$name = "hello.txt";
$file = fopen($name, "r");
$data = fread($file, filesize($name));
echo $data;
fclose($file);
?>
它将产生以下输出 -
示例
您还可以读取非 ASCII 文件,例如以 rb 模式打开的图像文件。
<?php
$name = "welcome.png";
$file = fopen($name, "rb");
$data = fread($file, filesize($name));
var_dump($data);
fclose($file);
?>
浏览器显示“var_dump”信息,如下所示 -
fscanf() 函数
PHP fscanf() 函数从文件流中读取输入并根据指定的格式对其进行解析,从而将其转换为相应类型的变量。每次调用该函数都会从文件中读取一行。
fscanf(resource $stream, string $format, mixed &...$vars): array|int|false|null
此处,$stream 参数是使用 fopen() 函数在读取模式下打开的文件的句柄。并且,$format 是包含以下一个或多个格式说明符的字符串 -
- %% − 返回百分比
- %b − 二进制数
- %c − 根据 ASCII 值的字符
- %f − 浮点数
- %F − 浮点数
- %o − 八进制数
- %s − 字符串
- %d − 带符号的十进制数
- %e − 科学记数法
- %u − 无符号十进制数
- %x − 小写字母的十六进制数
- %X − 大写字母的十六进制数
$vars 是一个可选参数,它通过引用指定变量,该变量将包含解析的值。
假设 “employees.txt” 文件位于下面给出的 PHP 脚本所在的同一目录中。文本文件的每一行都包含每个员工的 姓名、电子邮件、职位和薪水,以制表符分隔。
示例
以下 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>名字</b>: $name <b>电子邮箱</b>:
$email <b>薪水</b>: Rs. $salary <br>";
}
fclose($fp);
?>
它将产生以下输出 -
名字: Kavita 电子邮箱: kavita@hotmail.com 薪水: 25000
名字: Nandkumar 电子邮箱: nandu@example.com 薪水: 30000