Я создаю задание 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 из-за неверной даты.
Я проверил наличие предупреждений в журналах, но их нет, я проверил разрешения для папок, и все они в порядке.
Я только что получил это! Может быть, мои глаза что-то упускают или что-то происходит, что я не знаю, поэтому я мог бы действительно использовать некоторые советы.
Вам не нужно звонить strtotime()
на результат filemtime()
, strtotime()
предназначен для считывания удобочитаемой строки даты / времени и преобразования ее в числовую метку времени, но filemtime()
возвращает метку времени, а не строку.
echo 'file date is ' . date('Y-m-d', filemtime($_SERVER['DOCUMENT_ROOT'] . "/forum_functions/image_uploads/{$file}")) . '<br>';
Вы можете пропустить «strtotime». Согласно PHP-руководству filemtime вернет значение, подходящее для использования в date ().
1969-12-31 ужасно близок к 1-1-1970. Начало метки времени Unix. Чтобы закрыть для комфорта и совпадения. Похоже, что strtotime filemtime combo выдает 0, который ваш сервер, из-за перехода на летнее время или, возможно, смещения часовых поясов, и, таким образом, отображает 31 декабря 1969 года.