Hàm fread() trong PHP

29/07/2020 - lượt xem
Chia sẻ
 
Rate this post

Định Nghĩa.

Hàm fread() sẽ đọc nội dung của file truyền vào. Lưu ý hàm sẽ dừng việc đọc khi:

  • Đã đọc đủ $lenght byte.
  • Đã đọc đến cuối file.
  • Hết thời gian socket timeout.

Cú pháp.

Cú pháp:

fread ( resource $handle , int $length ) : string

Trong đó.

  • $handle là đường dẫn tới file cần đọc nội dung.
  • $length là độ dài tối đa hàm sẽ đọc.

Giá trị trả về.

  • Hàm trả về nội dung đã đọc được, nếu việc đọc thất bại hàm trả về False.

Ví dụ.

Ví dụ # 1 Một ví dụ đơn giản về fread ()

code:

<?php
// get contents of a file into a string
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

Ví dụ # 2 ví dụ Binary fread() 

Cảnh báo.

  • Trên các hệ thống phân biệt giữa tệp nhị phân và tệp văn bản (tức là Windows), tệp phải được mở với ‘b’ được bao gồm trong tham số chế độ fopen ().

code.

<?php
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>

Ví dụ # 3 ví dụ Binary fread()

Cảnh báo

  • Khi đọc từ bất cứ thứ gì không phải là tệp cục bộ thông thường, chẳng hạn như luồng được trả về khi đọc tệp từ xa hoặc từ popen () và fsockopen (), việc đọc sẽ dừng sau khi có sẵn gói. Điều này có nghĩa là bạn nên thu thập dữ liệu cùng nhau theo từng đoạn như trong các ví dụ dưới đây.

Code.

<?php
// For PHP 5 and up
$handle = fopen("http://www.example.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>
<?php
$handle = fopen("http://www.example.com/", "rb");
if (FALSE === $handle) {
    exit("Failed to open stream to URL");
}

$contents = '';

while (!feof($handle)) {
    $contents .= fread($handle, 8192);
}
fclose($handle);
?>

Ghi chú.

  • Ghi chú: Nếu bạn chỉ muốn lấy nội dung của tệp thành một chuỗi, hãy sử dụng file_get_contents() vì nó có hiệu suất tốt hơn nhiều so với mã ở trên.
  • Ghi chú: Lưu ý rằng fread () đọc từ vị trí hiện tại của con trỏ tệp. Sử dụng ftell() để tìm vị trí hiện tại của con trỏ và rewind() để tua lại vị trí con trỏ.

Hàm liên quan.

  • fwrite() –  ghi file ở dạng Binary-safe
  • fopen() – Mở một file hoặc một url
  • fsockopen() – Mở kết nối ổ cắm Internet hoặc Unix
  • popen() – Mở con trỏ tệp quá trình
  • fgets() – Lấy dòng từ con trỏ tệp
  • fgetss() – Lấy dòng từ con trỏ tệp và dải thẻ HTML
  • fscanf() – Phân tích cú pháp đầu vào từ một tệp theo định dạng
  • file() – Đọc toàn bộ tập tin thành một mảng
  • fpassthru() – Xuất tất cả dữ liệu còn lại trên một con trỏ tệp
  • ftell() – Trả về vị trí hiện tại của con trỏ đọc / ghi tệp
  • rewind() – Tua lại vị trí của một con trỏ tệp
  • unpack() – Giải nén dữ liệu từ chuỗi nhị phân

Thông tin thêm.

  • Bằng cách nào đó tất cả các mẫu mã để tải xuống, được mô tả ở đây, không phù hợp với tôi. Khi tôi tải xuống một tệp lớn readfile hoặc fread ở chế độ b, tệp cuối cùng không có md5 giống như bản gốc.
    Một số tests giúp tôi, tìm ra giải pháp:
    <?php
                $fp = fopen($DownloadFile, 'rb');
                while ( $cline = fgets($fp) )
                {
                    print $cline;
                }
                fclose($fp);
    ?>
    Bằng cách nào đó, đó là “an toàn nhị phân” và cung cấp tệp được đọc. md5 bản gốc và tải về là như nhau.
  • Lưu ý rằng fread () sẽ trả về ” (chuỗi trống) khi thời gian chờ xảy ra không giống như socket_read () trả về false …
  • Có thể đáng lưu ý rằng nếu trang web của bạn sử dụng bộ điều khiển phía trước với các phiên và bạn gửi một tệp lớn cho người dùng; bạn nên kết thúc phiên ngay trước khi gửi tệp, nếu không người dùng sẽ không thể tiếp tục duyệt trang trong khi tệp đang tải xuống.
  • Liên quan đến [các vấn đề với UTF-8 và] khi tải xuống các tệp Zip, tôi thấy rằng chỉ cần thêm 3 dòng mã trước khi bắt đầu chuyển sang bộ đệm để phân phối trong tất cả các trình duyệt đã giải quyết vấn đề.
    <?php
        ob_end_clean();
        ob_start();
        header( 'Content-Type:' );
    ?>
    xem vị trí được đặt trong hàm bên dưới:
    <?php
    function readfile_chunked( $filename, $retbytes = true ) {
        $chunksize = 1 * (1024 * 1024); // how many bytes per chunk
        $buffer = '';
        $cnt = 0;
        $handle = fopen( $filename, 'rb' );
        if ( $handle === false ) {
            return false;
        }
        ob_end_clean(); //added to fix ZIP file corruption
        ob_start(); //added to fix ZIP file corruption
        header( 'Content-Type:' ); //added to fix ZIP file corruption
        while ( !feof( $handle ) ) {
            $buffer = fread( $handle, $chunksize );
            //$buffer = str_replace("","",$buffer);
            echo $buffer;
            ob_flush();
            flush();
            if ( $retbytes ) {
                $cnt += strlen( $buffer );
            }
        }
        $status = fclose( $handle );
        if ( $retbytes && $status ) {
            return $cnt; // return num. bytes delivered like readfile() does.
        }
        return $status;
    }
    ?>

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 fread() 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

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm