PHP: làm cách nào để lấy ngày tạo tệp?


83

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ó.

filemtimefilectime.

Và nếu tệp không được sửa đổi, điều gì sẽ xảy ra?

Câu trả lời:


111

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.


Trả về thời gian tệp được thay đổi lần cuối hoặc FALSE khi bị lỗi. Thời gian được trả về dưới dạng dấu thời gian Unix.
zod

@zod Nếu bạn đọc xa hơn một chút so với những dòng đầu tiên, bạn có thể hiểu thêm. Đi vào phần bình luận một chút.
Alin Purcaru

Đó không phải là ngày tạo. Đó là tất cả những gì tôi đã nói :-)
zod

11
filemtimecho 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
Fedir RYKHTIK

Chạy hàm php này hay kéo trường MySQL để cập nhật lần cuối sẽ nhanh hơn? Trong trường hợp của tôi, đường dẫn hình ảnh được lưu trữ trong DB và đã chạy một truy vấn chọn
drooh 2:19

16

Đâ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.


4
Rakesh vui lòng giải thích mã của bạn, đừng chỉ đăng một số mã và mong mọi người hiểu nó.
Persijn

2
Mặc dù bài đăng chỉ có mã này có thể trả lời câu hỏi, vui lòng thêm giải thích tại sao nó làm như vậy. Điều này sẽ giúp độc giả trong tương lai đánh giá câu trả lời cho tình huống của họ.
Tom Brunberg

1
Hàm filemtime()trả về thời gian sửa đổi.
Stefan

Michael, vì ý nghĩa của hàm filemtime () không rõ ràng, mã đáng được nhận xét.
Radium

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 tệpmtime (). filemtime () nhận 1 tham số là đường dẫn đến tập tin, điều này có thể liên quan hoặc absolute.The ví dụ trên được sao chép từ các tài liệu PHP đây php.net/manual/en/function.filemtime.php
Harvey Dobson

8

Thật không may nếu bạn đang chạy trên linux, bạn không thể truy cập thông tin vì chỉ ngày sửa đổi cuối cùng được lưu trữ.

Nó hơi phụ thuộc vào hệ thống tập tin của bạn tho. Tôi biết rằng ext2 và ext3 không hỗ trợ thời gian tạo nhưng tôi nghĩ rằng ext4 thì có.


-3

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);
            }
        }

5
Tại sao bạn cần sửa đổi hoặc thậm chí xóa một tệp để lấy ngày tháng? Điều đó không có âm thanh như thế này là một giải pháp cho vấn đề gốc
Nico Haase
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.