换句话说,getlastmod() 返回调用它的脚本的最后修改时间,它不需要或不使用参数。
(PHP 4, PHP 5, PHP 7, PHP 8)
getlastmod — 获取上次页面修改时间
此函数没有参数。
示例 #1 getlastmod() 示例
<?php
// 输出例如“上次修改:1998 年 3 月 4 日 20:43:59”。
echo "上次修改: " . date ("F d Y H:i:s.", getlastmod());
?>
返回所有包含文件的最新的修改时间
<?php
function get_page_mod_time() {
$incls = get_included_files();
$incls = array_filter($incls, "is_file");
$mod_times = array_map('filemtime', $incls);
$mod_time = max($mod_times);
return $mod_time;
}
?>
如果您在某些 SAPI 上使用 register_shutdown_function(),关闭函数内的各种与文件系统相关的操作可能会出现意外情况,其中之一就是此函数可能返回 false。
另一方面,getlastmod() 显然会缓存返回值,因此如果您在普通代码中至少使用过一次,那么它应该在请求的剩余时间内有效。
除非您绝对确定您的 Apache 和 PHP 都使用相同的值编译了 -DFILE_OFFSET_BITS,否则请勿使用此函数。
如果不是,由于 Apache 和 PHP 使用了不同版本的 stat 结构,此函数将返回访问时间(或者可能是垃圾)而不是修改时间。
无论 Apache 和 PHP 版本如何,这都是正确的。
为了安全起见,始终使用下面已发布的解决方法
filemtime($_SERVER['SCRIPT_FILENAME'])
设置“Last-Modified”标头
<?php
setlocale(LC_TIME, "C");
$ft = filemtime ('referencefile');
$localt = mktime ();
$gmtt = gmmktime ();
$ft = $ft - $gmtt + $localt;
$modified = strftime ("%a, %d %b %Y %T GMT", $ft);
?>
用于跨多个目录显示最后修改时间的函数。例如,在您网页的“关于”部分显示最后修改日期
<?php
function array_prefix_values($prefix, $array)
{
$callback = create_function('$s','return "'.$prefix.'".$s;');
return array_map($callback,$array);
}
function get_last_update()
{
if ( func_num_args() < 1 ) return 0;
$dirs = func_get_args();
$files = array();
foreach ( $dirs as $dir )
{
$subfiles = scandir($dir);
$subfiles = array_prefix_values($dir,$subfiles);
$subfiles = array_filter($subfiles,"is_file");
$files = array_merge($files,$subfiles);
}
$maxtimestamp = 0;
$maxfilename = "";
foreach ( $files as $file )
{
$timestamp = filemtime($file);
if ( $timestamp > $maxtimestamp )
{
$maxtimestamp = $timestamp;
$maxfilename = $file;
}
}
return date("Ymd",$maxtimestamp)." ($maxfilename)";
}
print "last update: ".get_last_update("./lib/", "./css/", "./lang/");
?>
输出
last update: 20110927 (./lang/sk.php)
我发现在使用 getlastmod() 检查是否成功在标头中设置 Last Modified 日期时遇到了问题。下面的代码显示了设置 Last-Modified 标头之前和之后相同的 Last Modified 日期。
<?php
// 真实的修改日期
$modified = date ("F d Y H:i:s.", getlastmod());
// 人工修改日期 - 发送到头部
$last_modified = gmdate('D, d M Y H:i:s T', (time() - 43200));
// 缓存预防
header("Last-Modified: $last_modified GMT");
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
$getlast_modified = date ("F d Y H:i:s.", getlastmod());
print "True modified date(Before): $modified <p /> Date sent to header(After): $getlast_modified";
?>
然后我使用了 PEAR,HTTP_Request 类,它起作用了,Last-Modified 日期在每次请求时都会更新,这是我想要的效果。
<?php
require 'HTTP/Request.php';
$r = new HTTP_Request('http://www.sample.com/page.php');
$r->sendRequest();
$response_headers = $r->getResponseHeader();
print $response_headers["last-modified"];
?>