Hàm fwrite() trong PHP

24/11/2020 - lượt xem
Chia sẻ
 
Rate this post

Định nghĩa.

Hàm fwrite() sẽ ghi nội dung nào đó vào vị trí hiện tại của con trỏ tệp tin của file. Nếu file đã có nội dung, nó sẽ ghi đè lên những nội dung trùng vị trí.

Cú pháp.

Cú pháp:

fwrite ( resource $handle , string $string [, int $length ] ) : int

Trong đó.

  • $handle là file đã được mở trước đó, là kết quả trả về từ hàm fopen().
  • $string là nội dung muốn ghi.
  • Hàm sẽ dừng việc ghi khi đã ghi được $lenght byte.

Giá trị trả về.

  • Hàm sẽ trả về số byte đã ghi vào file. Nếu ghi thất bại hàm sẽ trả về Fasle.

Ghi chú.

  • Ghi vào luồng mạng có thể kết thúc trước khi toàn bộ chuỗi được viết. Giá trị trả về của fwrite () có thể được kiểm tra:
    <?php
    function fwrite_stream($fp, $string) {
        for ($written = 0; $written < strlen($string); $written += $fwrite) {
            $fwrite = fwrite($fp, substr($string, $written));
            if ($fwrite === false) {
                return $written;
            }
        }
        return $written;
    }
    ?>
  • 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 ().
  • Nếu xử lý là fopen () ed trong append mode, fwrite () là nguyên tử (trừ khi kích thước chuỗi vượt quá kích thước khối của hệ thống tệp, trên một số nền tảng và miễn là tệp nằm trong hệ thống tệp cục bộ). Đó là, không cần phải đổ vào () một tài nguyên trước khi gọi fwrite (); tất cả dữ liệu sẽ được ghi mà không bị gián đoạn.
  • Nếu ghi hai lần vào con trỏ tệp, thì dữ liệu sẽ được thêm vào cuối nội dung tệp:
    <?php
    $fp = fopen('data.txt', 'w');
    fwrite($fp, '1');
    fwrite($fp, '23');
    fclose($fp);
    
    // the content of 'data.txt' is now 123 and not 23!
    ?>

Ví dụ.

Ví dụ # 1 fscanf () đơn giản

code:

<?php
$filename = 'test.txt';
$somecontent = "Add this to the file\n";

// Let's make sure the file exists and is writable first.
if (is_writable($filename)) {

    // In our example we're opening $filename in append mode.
    // The file pointer is at the bottom of the file hence
    // that's where $somecontent will go when we fwrite() it.
    if (!$handle = fopen($filename, 'a')) {
         echo "Cannot open file ($filename)";
         exit;
    }

    // Write $somecontent to our opened file.
    if (fwrite($handle, $somecontent) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }

    echo "Success, wrote ($somecontent) to file ($filename)";

    fclose($handle);

} else {
    echo "The file $filename is not writable";
}
?>

Hàm liên quan.

  • fread() – Đọc nội dung file truyền vào
  • 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
  • file_get_contents() – Đọc nội dung file ơ dạng chuỗi.
  • pack() – Gói dữ liệu thành chuỗi nhị phân

Thông tin thêm.

  • – Sau khi gặp vấn đề với fwrite () trả về 0 trong trường hợp người ta hoàn toàn mong đợi giá trị trả về là false, tôi đã xem mã nguồn cho chính fwrite () của php. Hàm sẽ chỉ trả về false nếu bạn truyền vào các đối số không hợp lệ. Bất kỳ lỗi nào khác, giống như đường ống bị hỏng hoặc kết nối bị đóng, sẽ dẫn đến giá trị trả về nhỏ hơn strlen (chuỗi $), trong hầu hết các trường hợp 0. – Do đó, việc lặp lại với các cuộc gọi lặp lại đến fwrite () cho đến khi tổng số byte được viết bằng strlen () của giá trị đầy đủ hoặc dự đoán sai về lỗi sẽ dẫn đến một vòng lặp vô hạn nếu mất kết nố – Điều này có nghĩa là mã fwrite_stream () ví dụ từ các tài liệu, cũng như tất cả các hàm “trợ giúp” được đăng bởi những người khác trong các bình luận đều bị hỏng. Bạn * phải * kiểm tra giá trị trả về là 0 và hủy bỏ ngay lập tức hoặc theo dõi số lần thử lại tối đa. – Dưới đây là ví dụ từ các tài liệu. Mã này là BAD, vì một đường ống bị hỏng sẽ dẫn đến vòng lặp vô hạn fwrite () với giá trị trả về là 0. Vì vòng lặp chỉ bị phá vỡ nếu fwrite () trả về sai hoặc ghi thành công tất cả các byte, một vòng lặp vô hạn sẽ xảy ra khi thất bại.
    <?php
    // BROKEN function - infinite loop when fwrite() returns 0s
    function fwrite_stream($fp, $string) {
        for ($written = 0; $written < strlen($string); $written += $fwrite) {
            $fwrite = fwrite($fp, substr($string, $written));
            if ($fwrite === false) {
                return $written;
            }
        }
        return $written;
    }
    ?>
  • bạn muốn sao chép tập tin giả hoặc gửi tập tin giả  có thể gửi một tệp lớn hơn 4GB và ghi mà không sử dụng FSEEK bị giới hạn bởi PHP_INT_MAX. nó hoạt động trên hệ thống 32 bit hoặc 64 bit  fwrite và fread non pas de limite de location du pointeur
    <?php
    
    $gfz =  filesize_dir("d:\\starwars.mkv"); // 11,5GB
    echo 'Z:',$gfz,PHP_EOL;
    
    $fz = fopen('d:\\test2.mkv', 'wb');
    $fp = fopen('d:\\starwars.mkv', 'rb');
    echo PHP_EOL;
    $a = (float) 0;
    while(($l=fread($fp, 65536))) {
        fwrite($fz, $l);
        if(($a+=65536)%5) echo "\r", '>', $a, ' : ' , $gfz;
    }
    
    fclose($fp);
    fclose($fz);
    
    // test2.mkv' is 11,5GB
    
        function filesize_dir($file) {
            exec('dir ' . $file, $inf);
            $size_raw = $inf[6];
            $size_exp = explode(" ",$size_raw);
            $size_ext = $size_exp[19];
            $size_int = (float) str_replace(chr(255), '', $size_ext);
            return $size_int;
        }
    ?>

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