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.
ftruncate ( resource$handle
, int$size
) : bool
$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 đó.ftruncate()
:<?php $filename = 'lorem_ipsum.txt'; $handle = fopen($filename, 'r+'); ftruncate($handle, rand(1, filesize($filename))); rewind($handle); echo fread($handle, filesize($filename)); fclose($handle); ?>
<?php $fp = fopen("/tmp/file.txt", "r+"); ftruncate($fp, 0); fclose($fp); ?> // Bạn cũng có thể làm như này. <?php $fp = fopen("/tmp/file.txt", "w"); fclose($fp); ?>
<?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.
<?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
Bình luận: