CakeFest 2024: The Official CakePHP Conference

filectime

(PHP 4, PHP 5, PHP 7, PHP 8)

filectimeファイルの inode 変更時刻を取得する

説明

filectime(string $filename): int|false

ファイルの inode 変更時刻を取得します。

パラメータ

filename

ファイルへのパス。

戻り値

ファイルの最終更新時刻を返し、失敗した場合に false を返します。 時間は Unix タイムスタンプとして返されます。

エラー / 例外

失敗したときは E_WARNING が発生します。

例1 filectime() の例

<?php

// 出力例 somefile.txt was last changed: December 29 2002 22:16:23.

$filename = 'somefile.txt';
if (
file_exists($filename)) {
echo
"$filename was last changed: " . date("F d Y H:i:s.", filectime($filename));
}

?>

注意

注意:

注意: 多くの Unix ファイルシステムでは、i-ノードが変更された際、つまり、 パーミッション、所有者、グループ、または他のメタデータが書き込まれた際に、 ファイルが変更されたとみなされます。 filemtime() (この関数は、Web ページ上に "最終更新時刻" を表示させたい場合に使用するものです) および fileatime() も参照ください。

注意:

いくつかの Unix では、ファイルの ctime はファイルの作成時間として参照されます。 これは間違っています。多くの Unix ファイルシステムでは Unix ファイルの作成時間は存在しません。

注意:

時刻の精度は、 ファイルシステムによって異なることがあります。

注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。

ヒント

PHP 5.0.0 以降、この関数は、 何らかの URL ラッパーと組合せて使用することができます。 どのラッパーが stat() ファミリーをサポートしているかを調べるには サポートするプロトコル/ラッパー を参照してください。

参考

  • filemtime() - ファイルの更新時刻を取得する

add a note

User Contributed Notes 9 notes

up
14
StevieMc at example dot com
17 years ago
This method gets all the files in a directory, and echoes them in the order of the date they were added (by ftp or whatever).

<?PHP
function dirList ($directory, $sortOrder){

//Get each file and add its details to two arrays
$results = array();
$handler = opendir($directory);
while (
$file = readdir($handler)) {
if (
$file != '.' && $file != '..' && $file != "robots.txt" && $file != ".htaccess"){
$currentModified = filectime($directory."/".$file);
$file_names[] = $file;
$file_dates[] = $currentModified;
}
}
closedir($handler);

//Sort the date array by preferred order
if ($sortOrder == "newestFirst"){
arsort($file_dates);
}else{
asort($file_dates);
}

//Match file_names array to file_dates array
$file_names_Array = array_keys($file_dates);
foreach (
$file_names_Array as $idx => $name) $name=$file_names[$name];
$file_dates = array_merge($file_dates);

$i = 0;

//Loop through dates array and then echo the list
foreach ($file_dates as $file_dates){
$date = $file_dates;
$j = $file_names_Array[$i];
$file = $file_names[$j];
$i++;

echo
"File name: $file - Date Added: $date. <br/>"";
}

}
?>

I hope this is useful to somebody.
up
3
faketruth at yandex dot ru
8 years ago
If you need file creation time on Mac OS X:

<?php
if ($handle = popen('stat -f %B ' . escapeshellarg($filename), 'r')) {
$btime = trim(fread($handle, 100));
echo
strftime("btime: %Y.%m.%d %H:%M:%S\n", $btime);
pclose($handle);
}
?>
up
2
m dot rabe at directbox dot com
14 years ago
Under Windows you can use fileatime() instead of filectime().
up
2
javi at live dot com
15 years ago
Filemtime seems to return the date of the EARLIEST modified file inside a folder, so this is a recursive function to return the date of the LAST (most recently) modified file inside a folder.

<?php

// Only take into account those files whose extensions you want to show.
$allowedExtensions = array(
'zip',
'rar',
'pdf',
'txt'
);

function
filemtime_r($path)
{
global
$allowedExtensions;

if (!
file_exists($path))
return
0;

$extension = end(explode(".", $path));
if (
is_file($path) && in_array($extension, $allowedExtensions))
return
filemtime($path);
$ret = 0;

foreach (
glob($path."/*") as $fn)
{
if (
filemtime_r($fn) > $ret)
$ret = filemtime_r($fn);
// This will return a timestamp, you will have to use date().
}
return
$ret;
}

?>
up
2
coolkoon at gmail dot com
13 years ago
You should avoid feeding the function files without a path. This applies for filemtime() and possibly fileatime() as well. If you omit the path the command will fail with the warning "filectime(): stat failed for filename.php".
up
1
website at us dot kaspersky dot com
16 years ago
Line 37 of the code above has an error.

echo "File name: $file - Date Added: $date. <br/>"";

There is an extra " after the <br/> that needs to be deleted in order for this code to work.
up
1
chuck dot reeves at gmail dot com
16 years ago
filectime running on windows reading a file from a samba share, will still show the last modified date.
up
0
soapergem at gmail dot com
14 years ago
Note that on Windows systems, filectime will show the file creation time, as there is no such thing as "change time" in Windows.
up
-1
laurent dot pireyn at wanadoo dot be
22 years ago
If you use filectime with a symbolic link, you will get the change time of the file actually linked to. To get informations about the link self, use lstat.
To Top