Tôi đang đọc một thư mục có rất nhiều tệp.
Làm cách nào để lấy ngày tạo tệp. Tôi không thấy bất kỳ chức năng trực tiếp nào để lấy nó.
Có filemtime
và filectime
.
Và nếu tệp không được sửa đổi, điều gì sẽ xảy ra?
Câu trả lời:
Sử dụng filectime . Đối với Windows, nó sẽ trả về thời gian tạo và đối với Unix, thời gian thay đổi là thời gian tốt nhất mà bạn có thể nhận được vì trên Unix không có thời gian tạo (trong hầu hết các hệ thống tệp).
Cũng lưu ý rằng trong một số văn bản Unix, ctime của một tệp được coi là thời gian tạo tệp. Cái này sai. Không có thời gian tạo tệp Unix trong hầu hết các hệ thống tệp Unix.
filemtime
cho Linux là tốt hơn, chính xác hơn, vì filectime
được thay đổi trong quá trình chủ sở hữu, thay đổi quyền cũng như các hoạt động khác. Bạn sẽ nhận được nhiều cơ hội để có được thời gian tạo trên Linux sử dụngfilemtime
Đây là mã ví dụ được lấy từ tài liệu PHP tại đây: https://www.php.net/manual/en/ Chức năng.filemtime.php
// outputs e.g. somefile.txt was last changed: December 29 2002 22:16:23.
$filename = 'somefile.txt';
if (file_exists($filename)) {
echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
Mã chỉ định tên tệp, sau đó kiểm tra xem nó có tồn tại hay không và sau đó hiển thị thời gian sửa đổi bằng cách sử dụng filemtime()
.
filemtime()
nhận 1 tham số là đường dẫn đến tệp, tham số này có thể là tương đối hoặc tuyệt đối.
filemtime()
trả về thời gian sửa đổi.
Tôi biết chủ đề này rất cũ, nhưng, trong trường hợp nếu ai đó đang tìm kiếm câu trả lời, như tôi, tôi sẽ đăng giải pháp của mình.
Giải pháp này hoạt động NẾU bạn không phiền khi có thêm một số dữ liệu ở đầu tệp của mình.
Về cơ bản, ý tưởng là, nếu tệp không tồn tại, hãy tạo tệp đó và thêm ngày hiện tại vào dòng đầu tiên. Tiếp theo, bạn có thể đọc dòng đầu tiên với fgets(fopen($file, 'r'))
, biến nó thành một DateTime
đối tượng hoặc bất cứ thứ gì (rõ ràng bạn có thể sử dụng nó thô, trừ khi bạn lưu nó ở một định dạng kỳ lạ) và thì đấy - bạn đã có ngày tạo của mình! Ví dụ: tập lệnh của tôi để làm mới tệp nhật ký của tôi 30 ngày một lần trông giống như sau:
if (file_exists($logfile)) {
$now = new DateTime();
$date_created = fgets(fopen($logfile, 'r'));
if ($date_created == '') {
file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
}
$date_created = new DateTime($date_created);
$expiry = $date_created->modify('+ 30 days');
if ($now >= $expiry) {
unlink($logfile);
}
}