Hàm fpassthru() trong PHP

Hàm fpassthru() trong PHP
Hàm fpassthru() trong PHP

Chức năng của Hàm fpassthru() trong PHP

Hàm fpassthru() trong PHP dùng để đọc nội dung của tệp từ vị trí hiện tại của con trỏ tệp đến cuối tệp và in ra số byte.

Cú pháp của Hàm fpassthru() trong PHP

fpassthru($biến_chế_độ_đọc_file);

$biến_chế_độ_đọc_file: File đã quy định chế độ đọc và trạng thái mở file được bật.

Code Hàm fpassthru() trong PHP

Ở ví dụ này mình dùng hàm fgets() để đọc dòng đầu tiên đồng thời di chuyển con trỏ tệp tới cuối dòng 1, sau đó dùng hàm fpassthru() để đọc ở vị trí hiện tại của con trỏ tệp (cuối dòng 1) đến hết tệp và in ra số byte.

<?php
// Đường dẫn đến file
$filenguon = "thumuctest/test.txt";

// Quy định chế độ đọc cho file, chế độ mở của file được bật
$fdoc = fopen($filenguon, 'r');

// Đọc dòng đầu tiên, và con trỏ nội bộ của tệp cũng di chuyển tới cuối dòng
echo "<b>Đọc dòng đầu tiên, và con trỏ nội bộ của tệp cũng di chuyển tới cuối dòng</b><br>";
echo fgets($fdoc)."<br>";

// Đọc từ vị trí con trỏ tới cuối file và in ra số byte
echo "<b>Đọc từ vị trí con trỏ tới cuối file và in ra số byte</b><br>";

// Đóng chế độ mở của file
echo fpassthru($fdoc);
?>

Kết quả:

Đọc dòng đầu tiên, và con trỏ nội bộ của tệp cũng di chuyển tới cuối dòng
Hàm fpassthru() trong PHP dòng 1
Đọc từ vị trí con trỏ tới cuối file và in ra số byte
Hàm fpassthru() trong PHP dòng 2 Hàm fpassthru() trong PHP dòng 3 Hàm fpassthru() trong PHP dòng 4 Hàm fpassthru() trong PHP dòng 5 Hàm fpassthru() trong PHP dòng cuối 180

Những lưu ý khi sử dụng hàm fpassthru() trong PHP

Khi sử dụng fpassthru(), cần chú ý đến trạng thái của file handle và vị trí con trỏ dữ liệu. Hàm không tự đọc lại toàn bộ file từ đầu mà tiếp tục xử lý từ vị trí hiện tại của con trỏ. Vì vậy, các thao tác như đọc trước một phần dữ liệu hoặc thay đổi vị trí con trỏ có thể ảnh hưởng trực tiếp đến kết quả trả về.

Ngoài ra, fpassthru() phù hợp hơn với trường hợp cần đưa phần dữ liệu còn lại của một file trực tiếp ra output. Nếu chỉ cần lấy nội dung để tiếp tục xử lý trong PHP, những hàm đọc dữ liệu khác thường dễ kiểm soát hơn.

fpassthru() xử lý dữ liệu từ vị trí con trỏ file hiện tại

Một điểm quan trọng dễ bị bỏ qua là fpassthru() bắt đầu đọc từ vị trí hiện tại của con trỏ trong file. Nếu con trỏ đã được di chuyển bằng các thao tác đọc hoặc bằng fseek(), phần dữ liệu được đưa ra sẽ không còn bắt đầu từ đầu file.

Ví dụ, đoạn mã sau đưa con trỏ đến vị trí 10 rồi mới sử dụng fpassthru():

<?php
$handle = fopen("data.txt", "rb");

fseek($handle, 10);
fpassthru($handle);

fclose($handle);
?>

Trong trường hợp này, dữ liệu trước vị trí con trỏ không được fpassthru() xuất ra. Điều này đặc biệt đáng lưu ý khi dùng hàm để phục vụ file tải xuống hoặc truyền nội dung file cho trình duyệt.

Nếu muốn truyền toàn bộ file, cần bảo đảm con trỏ đang ở vị trí phù hợp trước khi gọi hàm. Đồng thời, file handle phải được mở thành công và ở chế độ cho phép đọc dữ liệu.

fpassthru() khác gì so với readfile() và fread()?

Ba hàm đều có thể được sử dụng để đọc dữ liệu nhưng cách hoạt động và mục đích sử dụng không giống nhau. fpassthru() nhận một file handle đã mở và đưa phần dữ liệu còn lại từ vị trí con trỏ hiện tại ra output.

readfile() đơn giản hơn khi mục tiêu là đọc trực tiếp toàn bộ một file và xuất nội dung ra output mà không cần tự mở file trước. Trong khi đó, fread() cho phép đọc một lượng dữ liệu được xác định và trả dữ liệu về cho chương trình để tiếp tục xử lý.

Hàm Đặc điểm chính Phù hợp khi
fpassthru() Xuất phần dữ liệu còn lại từ file handle hiện tại Đã có file handle và muốn truyền tiếp dữ liệu còn lại
readfile() Đọc file và xuất trực tiếp nội dung Cần xuất nhanh toàn bộ một file
fread() Đọc một lượng dữ liệu xác định và trả về chuỗi Cần kiểm soát dữ liệu để xử lý trong chương trình

Vì vậy, không nên mặc định dùng fpassthru() cho mọi trường hợp đọc file. Việc lựa chọn hàm nên dựa trên cách dữ liệu được sử dụng sau khi đọc: cần xuất trực tiếp, truyền tiếp phần dữ liệu còn lại hay lấy dữ liệu về để xử lý.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm fpassthru() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm fpassthru() trong PHP
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 *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !