Hàm fread() trong PHP
Trần Thị Vân
- 1126
- 05/08/2025
Chức năng của Hàm fread() trong PHP
Hàm fread() trong PHP dùng để đọc toàn bộ nội dung một file bằng cách truyền số byte của file và chế độ đọc file.
Cú pháp của Hàm fread() trong PHP
$nội_dung_file = fread($chế_độ_đọc_file, số_byte_của_file);
$chế_độ_đọc_file: Chế độ đọc file (Ví dụ: fopen($filename, "r"))
số_byte_của_file: Số byte của file (Ví dụ: filesize($filename)).
$nội_dung_file: Kết quả trả về biến chứa nội dung file.
Code đọc file của Hàm fread() trong PHP
Mình tạo file filetxt.txt có nội dung dưới đây:
Nội dung dòng 1
Nội dung dòng 2
Nội dung dòng 3
Nội dung dòng 4
Nội dung dòng 5
Code đọc file:
<?php
$filename = "filetxt.txt";
$filecd = fopen($filename, "r");//mở file ở chế độ đọc
$noidung = fread($filecd, filesize($filename));//truyền số byte của file và tiến hành đọc file
echo "<pre>$noidung</pre>";//in nội dung của file ra màn hình
fclose($filecd);//đóng file
?>
Kết quả:
Nội dung dòng 1
Nội dung dòng 2
Nội dung dòng 3
Nội dung dòng 4
Nội dung dòng 5
Những lưu ý khi sử dụng Hàm fread() trong PHP
Khi sử dụng fread(), kết quả đọc phụ thuộc trực tiếp vào số byte được yêu cầu và vị trí hiện tại của con trỏ file. Vì vậy, chỉ cần xác định sai kích thước dữ liệu hoặc xử lý file không đúng thứ tự, nội dung nhận được có thể bị thiếu, dư hoặc không đúng như mong đợi.
Hàm fread() đọc bao nhiêu byte trong file?
Tham số thứ hai của fread() quy định số byte tối đa mà PHP sẽ cố gắng đọc từ file. Giá trị này không phải số ký tự trong mọi trường hợp, bởi một ký tự có thể chiếm nhiều byte tùy theo cách mã hóa dữ liệu.
Nếu số byte yêu cầu lớn hơn phần dữ liệu còn lại, hàm chỉ đọc đến hết phần có thể đọc được thay vì tự tạo thêm dữ liệu. Ngược lại, nếu đặt giá trị quá nhỏ, nội dung trả về sẽ chỉ là một phần của file.
Ví dụ, muốn đọc tối đa 100 byte từ file đã mở, có thể sử dụng:
<?php
$noiDung = fread($handle, 100);
?>
Điểm cần chú ý là mỗi lần gọi fread(), con trỏ file sẽ tiến về phía trước theo lượng dữ liệu đã đọc. Do đó, những lần đọc tiếp theo sẽ bắt đầu từ vị trí mới thay vì đọc lại từ đầu file.
Vì sao Hàm fread() có thể trả về dữ liệu không như mong muốn?
Một nguyên nhân phổ biến là file chưa được mở đúng chế độ hoặc con trỏ file đang ở vị trí khác với vị trí mà chương trình dự kiến. Chẳng hạn, nếu trước đó đã thực hiện một thao tác đọc, lần gọi fread() tiếp theo sẽ tiếp tục từ vị trí hiện tại.
Kích thước truyền vào cũng cần phù hợp với dữ liệu cần xử lý. Nếu chương trình chỉ yêu cầu một phần nội dung nhưng lại đọc với kích thước quá lớn, việc xử lý kết quả có thể trở nên không cần thiết. Ngược lại, kích thước quá nhỏ có thể khiến dữ liệu phải được chia thành nhiều lần đọc.
Ngoài ra, cần kiểm tra kết quả mở file trước khi gọi fread(). Nếu tài nguyên file không hợp lệ, chương trình có thể phát sinh lỗi thay vì trả về nội dung mong muốn.
Cách kết hợp Hàm fread() với fopen() và filesize()
Trong trường hợp cần đọc toàn bộ nội dung của một file, fread() thường được sử dụng cùng fopen() để mở file và filesize() để xác định kích thước dữ liệu cần đọc.
<?php
$handle = fopen("data.txt", "r");
if ($handle !== false) {
$kichThuoc = filesize("data.txt");
$noiDung = fread($handle, $kichThuoc);
fclose($handle);
}
?>
Cách làm này giúp chương trình biết trước kích thước file thay vì tự đặt một con số cố định. Tuy nhiên, với file lớn, việc đọc toàn bộ nội dung vào bộ nhớ cùng lúc có thể không phải lựa chọn phù hợp. Khi đó, nên cân nhắc đọc dữ liệu theo từng phần để kiểm soát mức sử dụng bộ nhớ.
Một lưu ý khác là filesize() lấy kích thước của file tại thời điểm kiểm tra, trong khi dữ liệu có thể thay đổi nếu file được ghi hoặc cập nhật đồng thời. Vì vậy, với những quy trình xử lý file phức tạp, cần kiểm soát thứ tự mở, đọc và ghi dữ liệu để tránh kết quả không nhất quán.
Lời kết
Cảm ơn các bạn đã tham khảo bài viết Hàm fread() trong PHP.
- 0 Bình luận
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *