PHP Conference Japan 2024

filectime

(PHP 4、PHP 5、PHP 7、PHP 8)

filectime获取文件的 inode 修改时间

描述

filectime(字符串 $filename): 整数|false

获取文件的 inode 修改时间。

参数

filename

文件路径。

返回值

返回文件上次修改的时间,如果失败则返回 false。时间以 Unix 时间戳的形式返回。

错误/异常

失败时,会发出 E_WARNING

示例

示例 #1 filectime() 示例

<?php

// 输出例如 somefile.txt 最后修改时间:2002年12月29日 22:16:23。

$filename = 'somefile.txt';
if (
file_exists($filename)) {
echo
"$filename 最后修改时间: " . date("F d Y H:i:s.", filectime($filename));
}

?>

注释

注意:

注意:在大多数 Unix 文件系统中,当文件的 inode 数据发生更改时,该文件被视为已更改;也就是说,当 inode 中的权限、所有者、组或其他元数据更新时。另请参见 filemtime()(当您想要在网页上创建“上次修改”页脚时,您需要使用此函数)和 fileatime()

注意:

另请注意,在某些 Unix 文本中,文件的 ctime 被称为文件的创建时间。这是错误的。在大多数 Unix 文件系统中,Unix 文件没有创建时间。

注意:

请注意,时间分辨率可能因文件系统而异。

注意: 此函数的结果会被缓存。有关更多详细信息,请参阅 clearstatcache()

提示

从 PHP 5.0.0 开始,此函数也可以与某些 URL 封装器一起使用。请参阅 支持的协议和封装器 以确定哪些封装器支持 stat() 系列的功能。

另请参阅

添加注释

用户贡献的注释 9 条注释

14
StevieMc at example dot com
18 年前
此方法获取目录中的所有文件,并按添加日期(通过 ftp 或其他方式)的顺序输出它们。

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

// 获取每个文件并将其详细信息添加到两个数组中
$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);

// 按首选顺序排序日期数组
if ($sortOrder == "newestFirst"){
arsort($file_dates);
}else{
asort($file_dates);
}

// 将 file_names 数组与 file_dates 数组匹配
$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;

// 循环遍历日期数组,然后输出列表
foreach ($file_dates as $file_dates){
$date = $file_dates;
$j = $file_names_Array[$i];
$file = $file_names[$j];
$i++;

echo
"文件名称:$file - 添加日期:$date. <br/>"";
}

}
?>

我希望这对某些人有用。
3
faketruth at yandex dot ru
9 年前
如果您需要在 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);
}
?>
3
javi at live dot com
15年前
Filemtime 似乎返回文件夹内修改时间最早的文件的日期,因此这是一个递归函数,用于返回文件夹内修改时间最新(最近)的文件的日期。

<?php

// 只考虑您想显示其扩展名的那些文件。
$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);
// 这将返回一个时间戳,您将必须使用 date()。
}
return
$ret;
}

?>
2
coolkoon at gmail dot com
13年前
您应该避免向函数提供没有路径的文件。这适用于 filemtime(),也可能适用于 fileatime()。如果您省略路径,则命令将失败并显示警告“filectime(): stat failed for filename.php”。
1
website at us dot kaspersky dot com
17年前
上面代码的第 37 行存在错误。

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

<br/> 后面有一个多余的 ",需要删除才能使此代码正常工作。
1
m dot rabe at directbox dot com
14年前
在 Windows 下,您可以使用 fileatime() 代替 filectime()。
0
soapergem at gmail dot com
15年前
请注意,在 Windows 系统上,filectime 将显示文件创建时间,因为 Windows 中没有“更改时间”这样的概念。
0
chuck dot reeves at gmail dot com
17年前
在 Windows 上运行的 filectime 读取来自 Samba 共享的文件时,仍将显示上次修改日期。
-1
laurent dot pireyn at wanadoo dot be
23年前
如果您将 filectime 与符号链接一起使用,您将获得实际链接到的文件的更改时间。要获取有关链接本身的信息,请使用 lstat。
To Top