PHP filemtime()返回1969-12-31 - 无法找到问题

时间:2016-10-21 19:35:28

标签: php filetime

我正在构建一个扫描图像目录的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条件。

我已经检查了日志中的警告,但没有,我检查了文件夹权限,它们都很好。

我刚刚完成了!也许我的眼睛遗失了某些东西,或者那里发生了一些我不知情的事情,所以我真的可以使用一些建议。

2 个答案:

答案 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日。