filetime — PHP filemtime (), возвращающий 1969-12-31 — не могу найти проблему

Я создаю задание 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 правильно печатает путь

Третий эхо возвращает true, если файл существует, но не может ввести условие if из-за неверной даты.

Я проверил наличие предупреждений в журналах, но их нет, я проверил разрешения для папок, и все они в порядке.

Я только что получил это! Может быть, мои глаза что-то упускают или что-то происходит, что я не знаю, поэтому я мог бы действительно использовать некоторые советы.

0

Решение

Вам не нужно звонить strtotime() на результат filemtime(), strtotime() предназначен для считывания удобочитаемой строки даты / времени и преобразования ее в числовую метку времени, но filemtime() возвращает метку времени, а не строку.

   echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>';
0

Другие решения

Вы можете пропустить «strtotime». Согласно PHP-руководству filemtime вернет значение, подходящее для использования в date ().

1969-12-31 ужасно близок к 1-1-1970. Начало метки времени Unix. Чтобы закрыть для комфорта и совпадения. Похоже, что strtotime filemtime combo выдает 0, который ваш сервер, из-за перехода на летнее время или, возможно, смещения часовых поясов, и, таким образом, отображает 31 декабря 1969 года.

0

По вопросам рекламы [email protected]