Filemtime: примеры (PHP)
filemtime(string $filename): int|falseФункция filemtime() в PHP возвращает временную метку последнего изменения содержимого файла. Она используется для получения времени, когда данные файла были последний раз модифицированы. Это полезно для кеширования, отслеживания изменений в файлах, синхронизации данных или построения логов.
Функция принимает один обязательный аргумент:
- filename (string) — путь к файлу, время изменения которого требуется определить. Может быть абсолютным или относительным.
Возвращаемое значение — целое число (timestamp) с временем последнего изменения в секундах с начала эпохи Unix. В случае ошибки возвращается false.
<?
$file = 'test.txt';
$timestamp = filemtime($file);
if ($timestamp !== false) {
echo "Последнее изменение: " . date('Y-m-d H:i:s', $timestamp);
} else {
echo "Не удалось получить время изменения.";
}
?>Последнее изменение: 2023-10-15 14:30:22
<?
$file = 'отсутствующий_файл.txt';
$result = @filemtime($file);
var_dump($result);
?>bool(false)
<?
$file = 'cache.json';
echo "Первый вызов: " . filemtime($file) . "
";
// Предположим, файл был изменен внешним процессом
clearstatcache(true, $file);
echo "После сброса кеша: " . filemtime($file);
?>Первый вызов: 1678886400
После сброса кеша: 1678886500
- filectime() — возвращает время изменения индексного дескриптора (inode) файла, что часто соответствует времени создания или изменения прав доступа. Подходит для отслеживания метаданных.
- fileatime() — возвращает время последнего доступа к файлу. Менее надежна из-за настроек файловой системы, которые могут отключать обновление этого времени.
- stat() — возвращает массив с различной статистикой файла, включая время изменения (ключ 'mtime'), доступ ( 'atime') и изменение иноды ( 'ctime'). Эффективна при необходимости получения нескольких параметров одновременно.
Для контроля изменений содержимого предпочтительнее filemtime. Функция stat() используется при комплексном анализе файла.
<?
$time = filemtime('несуществующий_файл.txt');
echo date('Y-m-d', $time); // Предупреждение и некорректная дата
?>Warning: filemtime(): stat failed...
1970-01-01
<?
$file = 'часто_меняющийся.txt';
$time1 = filemtime($file);
// Файл изменен другим процессом
$time2 = filemtime($file); // Может вернуть старое значение из кеша
?>Решением служит вызов clearstatcache(true, $file) перед повторным чтением.
<?
// filemtime() следует по символическим ссылкам
$time = filemtime('/path/to/symlink'); // Возвращает время целевого файла
?>В PHP 8.0 существенных изменений в поведении filemtime() не было. Однако в ранних версиях, начиная с PHP 5.0, функция стала возвращать false при ошибках, а не 0. В PHP 7.0 улучшена обработка ошибок вроде E_WARNING при сбоях. Рекомендуется использовать строгую проверку на false, особенно после перехода с версий ниже 5.0.
<?
function getCachedData($file, $cacheTime) {
if (file_exists($file) && (time() - filemtime($file)) < $cacheTime) {
return file_get_contents($file);
}
$newData = generateData();
file_put_contents($file, $newData);
return $newData;
}
?><?
$file1 = 'source.xml';
$file2 = 'parsed.xml';
if (filemtime($file1) > filemtime($file2)) {
echo "Исходный файл новее, требуется повторный парсинг.";
}
?><?
$files = glob('logs/*.log');
$newestFile = null;
$newestTime = 0;
foreach ($files as $file) {
$mtime = filemtime($file);
if ($mtime > $newestTime) {
$newestTime = $mtime;
$newestFile = $file;
}
}
echo "Самый новый файл: $newestFile";
?><?
$cssFile = 'styles.css';
$version = filemtime($cssFile);
echo '<link rel="stylesheet" href="styles.css?v=' . $version . '">';
?><?
$watchFile = 'config.json';
$lastCheck = $_SESSION['last_file_mtime'] ?? 0;
$currentMtime = filemtime($watchFile);
if ($currentMtime !== false && $currentMtime > $lastCheck) {
$_SESSION['last_file_mtime'] = $currentMtime;
echo "Файл конфигурации был изменен.";
}
?>Filemtime в Python
import os
import datetime
timestamp = os.path.getmtime('test.txt')
print(datetime.datetime.fromtimestamp(timestamp))2023-10-15 14:30:22
const fs = require('fs');
const stats = fs.statSync('test.txt');
console.log(stats.mtime);2023-10-15T11:30:22.000Z
Filemtime в MySQL
SELECT UPDATE_TIME
FROM information_schema.tables
WHERE table_schema = 'database_name'
AND table_name = 'table_name';2023-10-15 14:30:22
В отличие от PHP, Python и Node.js предоставляют объектно-ориентированный интерфейс. MySQL позволяет получить время изменения только для таблиц, а не произвольных файлов.