我正在构建一个扫描图像目录的cron作业,并调整800像素宽的任何内容。我也只是希望它进入调整大小,如果图像上传那天,所以我试图使用filemtime()但我一直得到1969-12-31回来。
我已经阅读了我在这个问题上找到的每个论坛帖子,似乎没有任何效果。我在我的本地WIN 10机器(使用xammplite)和我的生产Linux机器上测试过它。两者都使用PHP 5.3或更高版本,我得到完全相同的结果。
这是一个代码片段以及我添加的回声,以了解正在发生的事情:
$files = scandir($_SERVER['DOCUMENT_ROOT'] . '/forum_functions/image_uploads');
$check_date = date('Y-m-d', strtotime('now'));
echo 'check date is ' . $check_date . '<br>';
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
echo 'file date is ' . date('Y-m-d', strtotime(filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}"))) . '<br>';
echo 'file is ' . $_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}" . '<br>';
echo 'file exists ' . file_exists($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}") . '<br>';
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}") && $check_date == date('Y-m-d', strtotime(filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")))) {
// do resizing
}
}
}
foreach循环中的第一个回显为所有图像打印1969-12-31
foreach中的第二个echo正确打印路径
对于文件存在,第三个echo返回true,但由于日期错误,它无法进入if条件。
我已经检查了日志中的警告,但没有,我检查了文件夹权限,它们都很好。
我刚刚完成了!也许我的眼睛遗失了某些东西,或者那里发生了一些我不知情的事情,所以我真的可以使用一些建议。
答案 0 :(得分:0)
您不需要就strtotime()
的结果致电filemtime()
。 strtotime()
用于获取人类可读的日期/时间字符串并将其转换为数字时间戳,但filemtime()
返回时间戳,而不是字符串。
echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>';
答案 1 :(得分:0)
您可能想要跳过'strtotime'。根据PHP手册,filemtime将返回一个适合在date()中使用的值。
1969-12-31非常接近1-1-1970。 unix时间戳的开始。为了舒适和巧合而关闭。似乎strtotime filemtime组合产生一个0,你的服务器,由于夏令时或可能时区偏移,因此显示1969年12月31日。