0

我正在构建一个扫描图像目录并调整任何超过 800 像素宽的 cron 作业。如果那天上传了图像,我也只希望它进入调整大小,所以我尝试使用 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 中的第二个回显正确打印了路径

第三个回显为文件存在返回 true,但由于日期错误而无法输入 if 条件。

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

我刚弄明白了!也许我的眼睛错过了一些东西,或者发生了一些我不知道的事情,所以我真的可以使用一些建议。

4

2 回答 2

0

您不需要调用strtotime(). 用于获取人类可读的日期/时间字符串并将其转换为数字时间戳,但返回时间戳,而不是字符串。filemtime()strtotime()filemtime()

   echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>';
于 2016-10-21T19:39:36.130 回答
0

您可能想跳过“strtotime”。根据 PHP 手册 filemtime 将返回一个适合在 date() 中使用的值。

1969-12-31 非常接近 1-1-1970。unix 时间戳的开始。为了舒适和巧合而关闭。由于夏令时或时区偏移,strtotime filemtime 组合似乎会产生一个 0 ,因此您的服务器会显示 1969 年 12 月 31 日。

于 2016-10-21T19:41:52.007 回答