Функция PHP filemtime возвращает отрицательное значение или очень большое значение
Я создаю плагин WordPress и вижу, что на некоторых серверах для определенных файлов stat
(или filemtime
), возвращающее неверное значение mtime. В некоторых случаях это отрицательное значение или очень большое значение (более 3 миллиардов).
В FTP я вижу, что метка времени верна.
Ответы
Ответ 1
Когда вы получаете отрицательные числа в любой временной метке PHP, это всего лишь количество секунд до эпохи Unix, и это не ограничивается filemtime
Пример A
echo strtotime("1950-1-1"); // Outputs -631155600
^------- negative value
Пример B
Вывод отрицательных значений не означает, что вы не можете отформатировать его правильно, если попробуйте
echo date("Y-m-d",-631155600); // Output 1950-01-01
Наконец
FTP I can see that the timestamp is correct though
Ваше FTP-приложение, безусловно, не является PHP и имеет собственную внутреннюю систему дат. его система Date может не использовать отрицательные значения в timestamp
Ответ 2
Если я правильно вас понимаю, очень большое значение - это то, что вы ищете - это временная марка Unix.
Вы попробовали что-то вроде этого?
date ("F d Y H:i:s.", filemtime($filename))
filemtime
возвращает количество секунд, прошедших с 1 января 1970 года, что действительно должно быть очень большим значением; вам нужно преобразовать эти секунды в нечто, читаемое человеком, используя что-то вроде приведенного выше примера.
Если, с другой стороны, вы знаете об этом, и вы считаете, что ваша большая ценность по-прежнему неправа, может быть полезно опубликовать пример указанного значения вместе с датой, которую вы ожидаете от него.
Ответ 3
Когда ваш сервер запускает демон ntp, это может быть результатом установки времени в запросе. Это происходит e.x. для журналов apache и других вещей, которые также зависят от системных функций unix.
Ответ 4
Какой размер файлов, возвращающих отрицательное значение для файла?
Здесь говорится: http://php.net/manual/en/function.stat.php: "Поскольку тип целочисленного типа PHP подписан, а на многих платформах используются 32-битные целые числа, некоторые функции файловой системы могут возвращать неожиданные результаты для файлов размером более 2 ГБ."
Ответ 5
Текущее значение временной метки unix составляет около 1 356 197 722, поэтому миллиард является разумным.
Хотя это вряд ли будет проблемой, стоит знать http://php.net/manual/en/function.clearstatcache.php и использовать его перед вызовом filemtime().