Hàm ftruncate() trong PHP

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

Định Nghĩa.

Hàm ftruncate() sẽ cắt bớt nội dung của file được truyền vào. Hàm sẽ cắt bớt các nội dung ở cuối file sao cho kích thước file sau khi cắt bằng $size truyền vào.

Cú pháp.

Cú pháp:

ftruncate ( resource $handle , int $size ) : bool

Trong đó.

  • $handle là file đã được mở trước đó bởi hàm fopen(). – Lưu ý $handle cần phải được mở để viết.
  • $size là kích thước file sau khi cắt bớt. – Lưu ý + Nếu kích thước lớn hơn tệp thì tệp được mở rộng với byte rỗng. + Nếu kích thước nhỏ hơn tệp thì tệp bị cắt ngắn theo kích thước đó.

Giá trị trả về.

  • Hàm trả về True khi thực hiên thành công. Nếu thất bại, hàm sẽ trả về False.

Ví dụ.

Ví dụ về cách sử dụng của hàm ftruncate():

code:

<?php
$filename = 'lorem_ipsum.txt';

$handle = fopen($filename, 'r+');
ftruncate($handle, rand(1, filesize($filename)));
rewind($handle);
echo fread($handle, filesize($filename));
fclose($handle);
?>

Ghi chú.

  • Con trỏ tập tin không được thay đổi

Hàm liên quan.

  • fopen () – Mở tệp hoặc URL
  • fseek() – Tìm kiếm trên một con trỏ tệp

Thông tin thêm.

  • Nếu bạn muốn làm trống một tệp trong nội dung của nó, hãy nhớ rằng việc mở tệp ở chế độ w sẽ tự động cắt tệp, vì vậy thay vì thực hiện .
    <?php
    $fp fopen("/tmp/file.txt""r+");
    ftruncate($fp0);
    fclose($fp);
    ?>
    
    // Bạn cũng có thể làm như này.
    
    <?php
    $fp fopen("/tmp/file.txt""w");
    fclose($fp);
    ?>
  • Bạn PHẢI sử dụng rewind() sau ftruncate () để thay thế nội dung tệp
  • Viết sau khi ftruncate Tôi không ngờ rằng tôi có thể viết ở giữa hư không. Tôi nghĩ rằng tôi sẽ viết vào đầu tệp nhưng 4 byte đầu tiên được điền tự động với NULL theo sau là “56”:
    <?php
    $str1  = 1234;
    $str2  =   56;
    $datei = "test.txt";
    
    $dh = fopen($datei,"w");
    fwrite($dh, $str1);
    fclose($dh);
    
    $dh = fopen ($datei,"r+");
    echo "content: ".fread($dh, filesize($datei))."<br>";
    echo "pointer after fread at: ".ftell($dh)."<br>";
    ftruncate($dh, 0);
    echo "pointer after truncate at: ".ftell($dh)."<br>";
    fwrite($dh, $str2);
    echo "pointer after fwrite at: ".ftell($dh)."<br>";
    rewind($dh);
    echo "pointer after rewind at: ".ftell($dh)."<br>";
    $str = fread($dh, 6);
    echo "content: $str<br>in ASCII: ";
    for($i = 0; $i < 6; $i++)
    echo ord($str{$i})."-";
    fclose($dh);
    
    /*
       OUTPUT:
       content: 1234
       pointer after fread at: 4
       pointer after truncate at: 4
       pointer after fwrite at: 6
       pointer after rewind at: 0
       content: 56
       in ASCII: 0-0-0-0-53-54
    */
    ?>
    – Vì vậy, không chỉ ftruncate đang lấp đầy một tập tin trống với NULL như trong ghi chú trước đó. Fread đang lấp đầy không gian hàng đầu với NULL.
  • Nếu bạn muốn ftruncate nhưng giữ kết thúc:
    <?php
        function ftruncatestart($filename,$maxfilesize){
            $size=filesize($filename);
            if ($size<$maxfilesize*1.0) return;
            $maxfilesize=$maxfilesize*0.5; //we don't want to do it too often...
            $fh=fopen($filename,"r+");
            $start=ftell($fh);
            fseek($fh,-$maxfilesize,SEEK_END);
            $drop=fgets($fh);
            $offset=ftell($fh);
            for ($x=0;$x<$maxfilesize;$x++){
                fseek($fh,$x+$offset);
                $c=fgetc($fh);
                fseek($fh,$x);
                fwrite($fh,$c);
            }
            ftruncate($fh,$maxfilesize-strlen($drop));
            fclose($fh);
        }
    ?>
    Nó sẽ không chỉ cắt nó mà còn tìm kiếm một dòng mới để bạn tránh làm hỏng csv hoặc logfiles của bạn. Nhưng tôi không biết liệu bạn có nhấn mạnh đầu đọc của ổ đĩa không. 😉

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