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.
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.
Đ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
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.
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.
Đ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
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
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.
Đ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
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 −
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 và salary của mỗi nhân viên, được phân cách bởi ký tự tab.
Đ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