PHP - Read File

Có một số tùy chọn trong PHP để đọc dữ liệu từ một tệp đã được mở bằng hàm fopen(). Các hàm tích hợp sẵn sau đây trong thư viện PHP có thể giúp chúng ta thực hiện thao tác đọc −

  • fgets() − lấy một dòng từ con trỏ tệp.

  • fgetc() − trả về một chuỗi với một ký tự duy nhất từ con trỏ tệp.

  • fread() − đọc một số byte nhất định từ con trỏ tệp.

  • fscanf() − đọc dữ liệu từ tệp và phân tích nó theo định dạng đã chỉ định.

The fgets() Function

Hàm fgets() có thể trả về một dòng từ một tệp đang mở. Hàm này ngừng trả về khi gặp một dòng mới ở một độ dài xác định hoặc EOF, cái nào đến trước và trả về false khi thất bại.

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

Ở đây, tham số $stream là một con trỏ tệp hoặc tay cầm đến tệp được mở bằng hàm fopen() với chế độ đọc hoặc đọc/ghi, và $length là một tham số tùy chọn chỉ định số byte sẽ được đọc.

Hoạt động đọc kết thúc khi "length-1" byte được đọc hoặc một ký tự xuống dòng được gặp, tùy điều nào xảy ra trước.

Example

Đoạn mã sau đọc dòng đầu tiên có sẵn từ tệp "hello.txt" −

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

Nó sẽ tạo ra output

Hello World

Example

Bạn có thể đặt hàm fgets() trong một vòng lặp để đọc file cho đến khi đạt đến cuối file.

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

Nó sẽ tạo ra output

Hello World
TutorialsPoint
PHP Tutorials

Ở đây, chúng tôi đã sử dụng hàm feof() mà trả về true nếu con trỏ tệp ở EOF; ngược lại trả về false.

The fgetc() Function

Hàm fgetc() trả về một ký tự duy nhất được đọc từ vị trí hiện tại của tay cầm tệp. Nó trả về false khi gặp EOF.

fgetc(resource $stream): string|false

Ở đây, tham số $stream là một con trỏ tệp hoặc tay cầm đến tệp đã được mở bằng hàm fopen() với chế độ đọc hoặc đọc/ghi.

Example

Đoạn mã sau đây hiển thị ký tự đầu tiên được đọc từ tệp "hello.txt" −

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

Nó sẽ tạo ra output

H

Example

Bạn cũng có thể đặt hàm fgetc() bên trong một vòng lặp để đọc tệp ký tự theo ký tự cho đến khi đạt đến EOF.

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

Nó sẽ tạo ra output

Hello World
TutorialsPoint
PHP Tutorials

The fread() Function

Hàm fread() trong PHP là một hàm an toàn với nhị phân để đọc dữ liệu từ một tệp. Trong khi hàm fgets() chỉ đọc từ một tệp văn bản, hàm fread() có thể đọc một tệp ở chế độ nhị phân.

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

Ở đây, tham số $stream là một con trỏ tệp hoặc tay cầm đến tệp đã được mở bằng hàm fopen() với chế độ đọc nhị phân hoặc chế độ đọc/ghi ( rb hoặc rb+ ). Tham số $length xác định số byte sẽ được đọc.

Nếu tham số $length không được cung cấp, PHP sẽ cố gắng đọc toàn bộ tệp cho đến khi đạt đến EOF, tùy thuộc vào kích thước khối được chỉ định.

Example

Đoạn mã sau đây đọc một tệp văn bản −

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

Nó sẽ tạo ra output

Hello World TutorialsPoint PHP Tutorials

Example

Bạn cũng có thể đọc một tệp không phải ASCII như một tệp hình ảnh được mở ở chế độ rb .

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

Trình duyệt hiển thị thông tin "var_dump" như sau −

PHP Read File

The fscanf() Function

Hàm fscanf() trong PHP đọc dữ liệu đầu vào từ một luồng tệp và phân tích nó theo định dạng đã chỉ định, từ đó chuyển đổi nó thành các biến của các kiểu tương ứng. Mỗi lần gọi hàm sẽ đọc một dòng từ tệp.

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

Ở đây, tham số $stream là tay cầm của tệp được mở bằng hàm fopen() và ở chế độ đọc. Và, $format là một chuỗi chứa một hoặc nhiều trong số các chỉ thị định dạng sau −

  • %% − Trả về một phần trăm

  • %b − Số nhị phân

  • %c − Ký tự theo giá trị ASCII

  • %f − Số thực

  • %F − Số thực

  • %o − Số bát phân

  • %s − Chuỗi

  • %d − Số thập phân có dấu

  • %e − Ký hiệu khoa học

  • %u − Số thập phân không dấu

  • %x − Số thập lục phân cho các chữ cái viết thường

  • %X − Số thập lục phân cho các chữ cái in hoa

$vars là một tham số tùy chọn xác định các biến tham chiếu sẽ chứa các giá trị đã phân tích.

Giả sử rằng tệp "employees.txt" có sẵn trong cùng thư mục với đoạn mã PHP dưới đây. Mỗi dòng trong tệp văn bản có name, email, post salary của mỗi nhân viên, được phân cách bởi ký tự tab.

Example

Đoạn mã PHP sau đây đọc tệp bằng cách sử dụng các định dạng chỉ định trong hàm 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);
?>

Nó sẽ tạo ra 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