Định Nghĩa.
Hàm
fpassthru() sẽ xuất tất cả dữ liệu của file tính từ con trỏ tệp tin đến cuối file.
Cú pháp.
Cú pháp:
fpassthru ( resource $handle
) : int
Trong đó.
- $handle
– Con trỏ tệp phải hợp lệ và phải trỏ đến một tệp được mở thành công bởi fopen () hoặc fsockopen() (và chưa được đóng bởi fclose ()).
Giá trị trả về.
- Nếu xảy ra lỗi, fpassthru () trả về FALSE. Mặt khác, fpassthru () trả về số lượng ký tự được đọc từ tay cầm và chuyển qua đầu ra
Ví dụ.
Ví dụ # 1 Sử dụng fpassthru () với các tệp nhị phân
code:
<?php
// mở tệp ở chế độ nhị phân
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// gửi đúng tiêu đề
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;
?>
Ghi chú.
- Khi sử dụng fpassthru () trên tệp nhị phân trên các hệ thống Windows, bạn nên đảm bảo mở tệp ở chế độ nhị phân bằng cách nối thêm b vào chế độ được sử dụng trong lệnh gọi fopen ().
- Bạn được khuyến khích sử dụng cờ b khi xử lý các tệp nhị phân, ngay cả khi hệ thống của bạn không yêu cầu nó, do đó các tập lệnh của bạn sẽ dễ mang theo hơn.
- Bạn có thể cần gọi rewind() để đặt lại con trỏ tệp ở đầu tệp nếu bạn đã ghi dữ liệu vào tệp.
- Nếu bạn chỉ muốn chuyển nội dung của tệp vào bộ đệm đầu ra, mà không sửa đổi trước hoặc tìm kiếm một phần bù cụ thể, bạn có thể muốn sử dụng readfile(), giúp bạn tiết kiệm cuộc gọi fopen ().
Hàm liên quan.
Thông tin thêm.
- Nếu bạn mở một tệp mới, hãy viết nó và sau đó gọi fpassthru () nó không hoạt động. Trước tiên, bạn cần gọi rewind() để đặt con trỏ tệp vào đầu tệp.
- Passthru không làm việc cho tôi đối với các tệp lớn hơn khoảng 5Mb. Chỉ cần thêm “ob_end_clean ()”, tất cả đều hoạt động tốt, bao gồm các tệp> 50Mb.
$ToProtectedFile=$pathUnder.$filename
$handle = @fopen($ToProtectedFile, "rb");
@header("Cache-Control: no-cache, must-revalidate");
@header("Pragma: no-cache"); //keeps ie happy
@header("Content-Disposition: attachment; filename= ".$NomFichier);
@header("Content-type: application/octet-stream");
@header("Content-Length: ".$SizeOfFile);
@header('Content-Transfer-Encoding: binary');
ob_end_clean();//required here or large files will not work
@fpassthru($handle);//works fine now
Các bạn có thể xem chi tiết hơn trên
php.net.
Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm
fpassthru() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm
codetutam.com