Đị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àmfopen()
. – 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.
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($fp, 0); 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