Php 简明教程

PHP - Read File

PHP 中有许多选项可用于读取已使用 fopen() 函数打开的文件中的数据。PHP 库中的以下内置函数可以帮助我们执行读取操作 −

  1. fgets() − 从文件指针获取一行。

  2. fgetc() − 从文件指针返回一个包含单个字符的字符串。

  3. fread() − 从文件指针读取指定数量的字节。

  4. fscanf() − 从文件中读取数据,并按照指定格式对其进行解析。

The fgets() Function

fgets() 函数可以从一个打开的文件中返回一行。此函数停止在指定长度的新行或 EOF 处返回,以先遇到的为准,并在失败时返回 false

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

此处, $stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄,而 $length 是指定要读取的字节数的可选参数。

当读取到“length-1”个字节或遇到新行时,读取操作结束,以先遇到的为准。

Example

以下代码从“hello.txt”文件中读取第一行可用行 −

<?php
   $file = fopen("hello.txt", "r");
   $str = fgets($file);
   echo $str;
   fclose($file);
?>

它将生成以下 output

Hello World

Example

你可以将 fgets() 函数放在一个循环中,以便在到达文件结尾之前读取文件。

<?php
   $file = fopen("hello.txt", "r");
   while(! feof($file)) {
      echo fgets($file). "<br>";
   }
   fclose($file);
?>

它将生成以下 output

Hello World
TutorialsPoint
PHP Tutorials

此处,我们使用了 feof() 函数,如果文件指针处于 EOF,则返回 true;否则,返回 false。

The fgetc() Function

fgetc() 函数返回从文件句柄当前位置读取的单个字符。遇到 EOF 时,它返回 false

fgetc(resource $stream): string|false

此处, $stream 参数是使用 fopen() 函数以读取或读/写模式打开的文件的文件指针或句柄。

Example

以下代码显示从“hello.txt”文件中读取的第一个字符 −

<?php
   $file = fopen("hello.txt", "r");
   $str = fgets($file);
   echo $str;
   fclose($file);
?>

它将生成以下 output

H

Example

你还可以将 fgetc() 函数放在一个循环内,以便逐个字符地读取文件,直到到达 EOF。

<?php
   $file = fopen("hello.txt", "r");
   while(! feof($file)) {
      $char = fgetc($file);
      if ($char == "\n")
      echo "<br>";
      echo $char;
   }
   fclose($file);
?>

它将生成以下 output

Hello World
TutorialsPoint
PHP Tutorials

The fread() Function

PHP 中的 fread() 函数是用于从文件读取数据的二进制安全函数。虽然 fgets() 函数仅从文本文件中读取,但 fread() 函数可以以二进制模式读取文件。

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

此处, $stream 参数是使用 fopen() 函数以二进制读取或读/写模式( rbrb+ )打开的文件的文件指针或句柄。 $length 参数指定要读取的字节数。

如果未给出 $length 参数,PHP 将尝试读取整个文件,直到到达 EOF,但需符合指定的块大小。

Example

以下代码读取一个文本文件 −

<?php
   $name = "hello.txt";
   $file = fopen($name, "r");
   $data = fread($file, filesize($name));
   echo $data;
   fclose($file);
?>

它将生成以下 output

Hello World TutorialsPoint PHP Tutorials

Example

你还可以读取以 rb 模式打开的图像文件等非 ASCII 文件。

<?php
   $name = "welcome.png";
   $file = fopen($name, "rb");
   $data = fread($file, filesize($name));
   var_dump($data);
   fclose($file);
?>

浏览器将“var_dump”信息显示为以下内容 −

php read file

The fscanf() Function

PHP 中的 fscanf() 函数从文件流中读取输入并根据特定格式对其进行解析,从而将其转换为指定类型的变量。每次调用此函数都将从文件中读取一行。

fscanf(resource $stream, string $format, mixed &...$vars): array|int|false|null

此处, $stream 参数是指针,它指向使用 fopen() 函数打开的文件,且为读取模式。同时, $format 为一个字符串,包含下列一个或多个格式说明符 −

  1. %% − 返回一个百分比

  2. %b − Binary number

  3. %c − 根据 ASCII 值设置字符

  4. %f − Floating-point number

  5. %F − Floating-point number

  6. %o − Octal number

  7. %s − String

  8. %d − 有符号十进制数

  9. %e − Scientific notation

  10. %u − 无符号十进制数

  11. %x − 小写字母十六进制数

  12. %X − 大写字母十六进制数

$vars 是一个可选参数,它通过引用指定包含解析值的变量。

假设“employees.txt”文件在与下方 PHP 脚本相同的目录中。文本文件中每一行都有每个员工的 name, email, postsalary ,由制表符分隔。

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