PHP中filemtime()获取文件时间戳异常问题求助
解决filemtime()返回1970年时间戳的问题
嘿,Rahil,我来帮你搞定这个问题!你看到的1970年1月1日时间戳,本质是因为filemtime()函数找不到目标文件,返回了false——而date()函数会把false当作0来处理,也就是Unix纪元的起始时间。
问题根源
你的代码里路径拼接有语法错误:
$path="A2storage/'.$image.'";
这里双引号和单引号混用,导致最终生成的路径是A2storage/'.$image.'(把变量名当成了字符串的一部分),而不是正确的A2storage/实际文件名,自然找不到文件。
排查&修正步骤
修复路径拼接语法
把路径改成正确的字符串拼接方式,二选一即可:- 用双引号直接解析变量:
$path = "A2storage/$image"; - 用单引号拼接:
$path = 'A2storage/' . $image;
- 用双引号直接解析变量:
添加文件存在校验
在调用filemtime()之前,先确认文件是否存在,避免返回错误值:if (file_exists($path)) { clearstatcache(true, $path); // 清除指定文件的状态缓存,确保获取最新时间 $timestamp = filemtime($path); $date = date('Y-m-d H:i:s', $timestamp); // 记得补全date()的格式参数 } else { $date = '文件不存在'; }用绝对路径更可靠
相对路径容易受当前脚本执行目录影响,建议用__DIR__拼接绝对路径,确保定位准确:$path = __DIR__ . '/A2storage/' . $image;
修正后的完整代码片段
$count = 0; // 记得初始化count变量 foreach($images as $image) { $count += 1; if($count == 1) { echo '<div class="box boxgallery">'; } // 修正后的路径与时间处理 $path = __DIR__ . '/A2storage/' . $image; if (file_exists($path)) { clearstatcache(true, $path); $timestamp = filemtime($path); $date = date('Y-m-d H:i:s', $timestamp); } else { $date = "文件 $image 不存在"; } // 示例:输出文件名称与修改时间 echo "<div class='gallery-item'> <p>文件名:$image</p> <p>修改时间:$date</p> </div>"; // 记得补充box的闭合逻辑(比如每N个文件闭合一次) if($count % 4 == 0) { // 假设每4个文件一组 echo '</div><div class="box boxgallery">'; } } // 循环结束后闭合最后一个box if($count > 0) { echo '</div>'; }
内容的提问来源于stack exchange,提问作者Rahilkhan Pathan
相关产品推荐
相关产品推荐

