filemtime — Получить время последнего изменения файла


filemtime

(PHP 4, PHP 5, PHP 7)

filemtime — Возвращает время последнего изменения файла

Описание

Данная функция возвращает время последней записи блоков файла, иначе говоря, изменения содержания файла.

Список параметров

Возвращаемые значения

Возвращает время последнего изменения указанного файла, или FALSE в случае возникновения ошибки. Время возвращается в формате временной метки Unix, который подходит для передачи в качестве аргумента функции date() .

Примеры

Пример #1 Пример использования функции filemtime()

// Пример вывода: В последний раз файл somefile.txt был изменен: December 29 2002 22:16:23.

$filename = ‘somefile.txt’ ;
if ( file_exists ( $filename )) <
echo «В последний раз файл $filename был изменен: » . date ( «F d Y H:i:s.» , filemtime ( $filename ));
>
?>

Ошибки

В случае неудачного завершения работы генерируется ошибка уровня E_WARNING .

Примечания

Учтите, что обработка времени может отличаться в различных файловых системах.

Замечание: Результаты этой функции кешируются. Более подробную информацию смотрите в разделе clearstatcache() .

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми обертками url. Список оберток, поддерживаемых семейством функций stat() , смотрите в разделе Поддерживаемые протоколы и обертки.

Смотрите также

  • filectime() — Возвращает время изменения индексного дескриптора файла
  • stat() — Возвращает информацию о файле
  • touch() — Устанавливает время доступа и модификации файла
  • getlastmod() — Получает время последней модификации страницы

изменение времени последнего изменения файла с помощью touch () и получение результата с помощью filemtime ()

Поэтому я пытаюсь получить дату последнего изменения файла, а затем обновить его до текущего времени, но когда я смотрю на результат, я получаю ЖЕ временную метку как в $ oldtime, так и в $ newtime

1 ответ

Используйте clearstatcache после touch к файлу, чтобы получить правильное значение времени модификации.

Поскольку вы уже использовали filemtime , результат для него был кеширован, и при втором вызове результат извлекается из этого кэша вместо прямой проверки файла.

Информация о файле в PHP


В данной статье мы узнаем, как получить полезную информацию о файле, например размер, даты создания и изменения, имя и расширение.

Размер, дата создания и изменения файла

Размер файла можно узнать с помощью функции filesize() . Результатом будет число в байтах:

Дату последнего изменения файла можно вычислить функцией filemtime() . Заметьте, она возвращает временную метку UNIX. В будущем мы изучим работу с датами более подробно, а сейчас я просто покажу, как с помощью функции date можно получить дату из временной метки:

Для вычисления даты создания файла существует функция filectime() , но учтите, что в большинстве UNIX систем отсутствует понятие времени создания файла, поэтому не на всех платформах эта функция будет корректно работать. В качестве альтернативы можно сохранять время создания файла в файл или БД в том же скрипте, где создаётся файл.

Папка, имя и расширение файла

Функция pathinfo() позволяет получить из пути к файлу его имя (с расширением или без), расширение и иерархию папок. Посмотрим, как это выглядит:

Результат в браузере:

Если вам нужен только один компонент пути, передайте вторым параметром одну из встроенных констант: PATHINFO_DIRNAME , PATHINFO_BASENAME , PATHINFO_EXTENSION , PATHINFO_FILENAME . Так можно получить имя файла без остальной информации:

Директория скрипта

Получать папку текущего скрипта мы уже умеем, для этого нужно совместить функцию dirname() с константой __FILE__ :

Дата и время изменения файла

Пытаюсь при помощи php получть дату и время последнего изменения файла.

Пробовал использовать функции filemtime() и stat(). Функции работают, но возвращают не дату изменения, а дату загрузки файла на сервер.

Можно ли как-то получить дату и время именно изменения файла, которая выводится при просмотре свойств в Windows? Просматривая файлы на сервере через TC, я вижу именно эту дату, значит она сохраняется.

25.02.2013, 15:22

Дата и время (сравнение)
Привет всем. Вообщем ниже представлен код. Примитивный выбор числа,месяца и часа. Подскажите.

Где спарсить матчи или взять в ввиде json, ато спарсить не получается, нужны название. дата и время и коэфициенты
2 25.02.2013, 15:27 2

Файл на сервере был изменен ровно в тот момент, когда был загружен на сервер. Это физически совершенно уже другой файл, не имеющий к исходному никакого отношения.

На сервер не передаются никакие даты создания/изменения файла.

25.02.2013, 16:50 3

Решение

вот скрипт который тебе покажет дату и время последнего изменения файла

сохрани например как файл timerecord.php
или укажи другой файл о котором нужно узнать последнее изменение его.
временную зону поменяй на свою — ‘Europe/Madrid’

25.02.2013, 16:50

Показать время изменения файла в каталоге файлов
Здравствуйте, я пытаюсь показать время изменения файлов в указанном каталоге, но у меня.

Илон Маск рекомендует:  DateSeparator - Переменная Delphi


Дата и время в бд
Здравствуйте, может не в ту тему пишу но, у меня такой вопрос. У меня бд mysql в одной таблице в.

Дата и время
у меня есть int-переменная, допусти, 5. она указана в минутах. 5 минут. как мне прибавить к.

меняется время последнего изменения файла через контакт () и получение результата с filemtime ()

Так что я пытаюсь получить дату последнего изменения файла, а затем обновить его до текущего времени, но когда я смотрю на результат я получаю тот же метку времени в обоих $ Oldtime и $ newtime

Используйте clearstatcache после touch ИНГ файла , чтобы получить правильное значение времени модификации.

Потому что вы использовали filemtime раньше, результат для него был кэшируются, и на второй вызов, результат извлекается из этого кэша , а не проверять файл напрямую.

Как получить дату/время создания и изменения файла в Python?

У меня есть скрипт, который должен делать некоторые вещи на основе дат создания и изменения файлов, но должен работать на Linux и Windows.

Что самое лучшее кросс-платформенный способ получить дату/время создания и изменения файла в Python?

10 ответов

получить какую-то дату модификации кросс — платформенным способом легко-просто позвоните os.path.getmtime(path) и вы получите метку времени Unix, когда файл в path последнего изменения.

получения файла создание даты, с другой стороны, fiddly и зависящие от платформы, отличающиеся даже между тремя большими осами:

  • On окна, файла ctime (описана в https://msdn.microsoft.com/en-us/library/14h5k7ff.aspx) хранит дату создания. Вы можете получить доступ к этому в Python посредством os.path.getctime() или .st_ctime атрибут результата вызова os.stat() . Это не работа на Unix, где ctime это последний раз, когда атрибуты файла или содержание были изменены.
  • On Mac, а также некоторые другие ОС на основе Unix, вы можете использовать .st_birthtime атрибут результата вызова os.stat() .

On Linux, в настоящее время это невозможно, по крайней мере, без написания расширения C для Python. Хотя некоторые файловые системы обычно используются с Linux хранить даты создания (например, ext4 сохраняет их в st_crtime ), ядро Linux не предлагает никакого способа доступа к ним; в частности, структуры, которые он возвращает от stat() вызовы на языке C, начиная с последней версии ядра,не содержат полей даты создания. Вы также можете увидеть, что идентификатор st_crtime в настоящее время не имеет нигде в исходным кодом на Python. По крайней мере, если вы на ext4 , данных и прикреплен к кодам в файловой системе, но нет удобного способа доступа к нему.

собирая все это вместе, кросс-платформенный код должен выглядеть примерно так.

у вас есть несколько вариантов. Во-первых, вы можете использовать os.path.getmtime и os.path.getctime функции:

Примечание: ctime() тут не см. время создания в системах * nix, но скорее последний раз, когда данные индекса изменились. (спасибо Кодзиро за то, что он прояснил этот факт в комментариях, предоставив ссылку на интересный блог post)

лучшая функция для этого -os.путь.getmtime(). Внутренне, это просто использует os.stat(filename).st_mtime .

модуль datetime является лучшим манипулированием метками времени, поэтому вы можете получить дату изменения как datetime объект вроде этого:

edit: в новом коде вы, вероятно, должны использовать os.путь.getmtime() (спасибо христианской Oudard)
но обратите внимание, что он возвращает значение с плавающей запятой time_t с долей секунды (если ваша ОС поддерживает его)

существует два метода для получения времени mod, os.путь.getmtime() или OS.stat (), но ctime не является надежным кросс-платформенным (см. ниже).

os.путь.getmtime()

getmtime(путь)
возвращает время последней модификации путь. Возвращаемое значение-это число, дающее количество секунд с начала эпохи (см. модуль). Поднять ОС.ошибки если файл не не существует или недоступна. Новое в версия 1.5.2. Изменено в версии 2.3: если ОС.stat_float_times () возвращает True, результатом является число с плавающей запятой.

os.stat ()

stat(путь)
выполните системный вызов stat () по заданному пути. Возвращаемое значение-это объект, атрибуты соответствуют элементам структуры stat, а именно: st_mode (защита бит), st_ino (номер inode), st_dev (устройства), st_nlink (количество ссылки), st_uid (идентификатор пользователя владельца), st_gid (идентификатор группы владельца), st_size (размер файла, в байтах), st_atime (время последнего доступа), тип доступа (время последнего контента модификация),st_ctime (зависит от платформы; время последнего изменения метаданных в Unix или время создания в Windows):

Функция Filemtime


Очень часто бывает нужно узнать время создания или редактирования отдельного файла. Это нужно, например, для того, что бы в списку сначала были новые страницы или последние отредактированы, также для других целей.

Для этого в PHP существует функция Filemtime:
Данная функция возвращает время последнего изменения указанного файла Filename или возвратит FALSE в случае возникновения ошибки. Также функция не применима для работы с удаленными файлами, поскольку указанный файл должен быть доступен через файловую систему сервера.

Время возвращается в формате временной метки Unix, который подходит для передачи в качестве аргумента функции Date.
Результатом выполнения будет приблизительно следующее:

filemtime

filemtime — Получить время последнего изменения файла

Описание

Функция возвращает время последнего изменения указанного файла или FALSE в случае возникновения ошибки. Время возвращается в формате ‘Unix timestamp’, который подходит для передачи в качестве аргумента функции date().

Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Начиная с PHP 5.0.0, эта функция также может быть использована с некоторыми упаковщиками url. Список упаковщиков, поддерживаемых семейством функций stat(), смотрите в List of Supported Protocols/Wrappers.

Данная функция возвращает время последней записи блоков файла, иначе говоря, изменения содержания файла.

Пример #1 Пример использования функции filemtime()

// Пример вывода: в последний раз файл somefile.txt был изменен: December 29 2002 22:16:23.

$filename = ‘somefile.txt’ ;
if ( file_exists ( $filename )) <
echo «в последний раз файл $filename был изменен: » . date ( «F d Y H:i:s.» , filemtime ( $filename ));
>
?>

Коментарии

To get the last modification time of a directory, you can use this:

Take note on the last dot which is needed to see the directory as a file and to actually get a last modification date of it.

This comes in handy when you want just one ‘last updated’ message on the frontpage of your website and still taking all files of your website into account.

Regards,
Frank Keijzers

Another little handy tool; to get the most recent modified time from files in a directory. It even does recursive directories if you set the $doRecursive param to true. Based on a file/directory list function I saw somewhere on this site. ;)

The snippet of code earlier that allows you to delete all files older than 2 weeks uses the function (filemtime) — which checks the original create date of the file (filesystem independent). You MAY want to use filectime() — that looks at when the file was last changed on YOUR file system.

A comment below states

«When using this function to get the modified date of a directory,
it returns the date of the file in that directory that was last modified.»

this is not (necessarily) correct, the modification time of a directory will be the time of the last file *creation* in a directory (and not in it’s sub directories).

«this is not (necessarily) correct, the modification time of a directory will be the time of the last file *creation* in a directory (and not in it’s sub directories).»

This is not (necessarily) correct either. In *nix the timestamp can be independently set. For example the command «touch directory» updates the timestamp of a directory without file creation.

Also file removal will update the timestamp of a directory.

i needed the ability to grab the mod time of an image on a remote site. the following is the solution with the help of Joe Ferris.


function filemtime_remote ( $uri )
<
$uri = parse_url ( $uri );
$handle = @ fsockopen ( $uri [ ‘host’ ], 80 );
if(! $handle )
return 0 ;

fputs ( $handle , «GET $uri[path] HTTP/1.1\r\nHost: $uri[host]\r\n\r\n» );
$result = 0 ;
while(! feof ( $handle ))
<
$line = fgets ( $handle , 1024 );
if(! trim ( $line ))
break;

$col = strpos ( $line , ‘:’ );
if( $col !== false )
<
$header = trim ( substr ( $line , 0 , $col ));
$value = trim ( substr ( $line , $col + 1 ));
if( strtolower ( $header ) == ‘last-modified’ )
<
$result = strtotime ( $value );
break;
>
>
>
fclose ( $handle );
return $result ;
>
// echo filemtime_remote(‘http://www.somesite.com/someimage.jpg’);

concerning «notepad at codewalkers dot com»‘s code:

this code is pretty neat, but i just wanted to note that using the «HEAD»-method instead of the «GET»-method in the http-request might be preferrable, since then not the whole resource is being downloaded.

http/1.1 definiton snippet:
Section «9.4 HEAD»

The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response. The metainformation contained in the HTTP headers in response to a HEAD request SHOULD be identical to the information sent in response to a GET request. This method can be used for obtaining metainformation about the entity implied by the request without transferring the entity-body itself. This method is often used for testing hypertext links for validity, accessibility, and recent modification. [. ]
— snippet end —

the code would then be.

— snippet —
fputs($handle,»HEAD $uri[path] HTTP/1.1\r\nHost: $uri[host]\r\n\r\n»);
— snippet end —

If PHP’s integer type is only 32 bits on your system, filemtime() will fail on files over 2GB with the warning «stat failed». All stat()-related commands will exhibit the same behavior.

As a workaround, you can call the system’s stat command to get the modification time of a file:

On FreeBSD:
$mtime = exec (‘stat -f %m ‘. escapeshellarg ($path));

On Linux:
$mtime = exec (‘stat -c %Y ‘. escapeshellarg ($path));

Thanks to «mpb dot mail at gmail dot com» for his/her similar comment on stat().

Here is a small but handy script that you can use to find which files in your server are modified after a date/time that you specify. This script will go through all folders in the specified directory recursively and echo the modified files with the last modified date/time.

//Starts Here
//Put here the directory you want to search for. Put / if you want to search your entire domain
$dir=’/’;

//Put the date you want to compare with in the format of: YYYY-mm-dd hh:mm:ss
$comparedatestr=»2006-08-12 00:00:00″;
$comparedate=strtotime($comparedatestr);

//I run the function here to start the search.
directory_tree($dir,$comparedate);

//This is the function which is doing the search.
function directory_tree($address,$comparedate)<

$fulldir=$address.’/’.$entry;
$last_modified = filemtime($fulldir);
$last_modified_str= date(«Y-m-d h:i:s», $last_modified);

if($comparedate ‘.$last_modified_str;
echo «
«;
>

To get the modification date of some remote file, you can use the fine function by notepad at codewalker dot com (with improvements by dma05 at web dot de and madsen at lillesvin dot net).

But you can achieve the same result more easily now with stream_get_meta_data (PHP>4.3.0).

However a problem may arise if some redirection occurs. In such a case, the server HTTP response contains no Last-Modified header, but there is a Location header indicating where to find the file. The function below takes care of any redirections, even multiple redirections, so that you reach the real file of which you want the last modification date.

// get remote file last modification date (returns unix timestamp)
function GetRemoteLastModified ( $uri )
<
// default
$unixtime = 0 ;

$fp = fopen ( $uri , «r» );
if( ! $fp )

$MetaData = stream_get_meta_data ( $fp );


foreach( $MetaData [ ‘wrapper_data’ ] as $response )
<
// case: redirection
if( substr ( strtolower ( $response ), 0 , 10 ) == ‘location: ‘ )
<
$newUri = substr ( $response , 10 );
fclose ( $fp );
return GetRemoteLastModified ( $newUri );
>
// case: last-modified
elseif( substr ( strtolower ( $response ), 0 , 15 ) == ‘last-modified: ‘ )
<
$unixtime = strtotime ( substr ( $response , 15 ) );
break;
>
>
fclose ( $fp );
return $unixtime ;
>
?>

This is a very handy function for dealing with browser caching. For example, say you have a stylesheet and you want to make sure everyone has the most recent version. You could rename it every time you edit it, but that would be a pain in the ass. Instead, you can do this:

echo ‘
. filemtime ( ‘style.css’ ) . ‘» />’ ;
?>

Sample output:

By appending a GET value (the UNIX timestamp) to the stylesheet URL, you make the browser think the stylesheet is dynamic, so it’ll reload the stylesheet every time the modification date changes.

It could be useful to determinate the timestamp of the newest file in a directory. (e.g. if you want to find out when the last change was made to your project).

Following function will help you:

function getAllFiles ( $directory , $recursive = true ) <
$result = array();
$handle = opendir ( $directory );
while ( $datei = readdir ( $handle ))
<
if (( $datei != ‘.’ ) && ( $datei != ‘..’ ))
<
$file = $directory . $datei ;
if ( is_dir ( $file )) <
if ( $recursive ) <
$result = array_merge ( $result , getAllFiles ( $file . ‘/’ ));
>
> else <
$result [] = $file ;
>
>
>
closedir ( $handle );
return $result ;
>

function getHighestFileTimestamp ( $directory , $recursive = true ) <
$allFiles = getAllFiles ( $directory , $recursive );
$highestKnown = 0 ;
foreach ( $allFiles as $val ) <
$currentValue = filemtime ( $val );
if ( $currentValue > $highestKnown ) $highestKnown = $currentValue ;
>
return $highestKnown ;
>

echo ‘The newest file has the time stamp:
‘ ;
echo date ( ‘Y-m-d H:i:s’ , getHighestFileTimestamp ( ‘../’ ));

Please note that many of the functions below that people have provided to get files modified after a certain time in a directory will NOT get all files on a Windows operating system.

If you copy and paste any file inside the folder or into the folder from another folder (such as images that may be used but aren’t going to be modified right away), the modified time is not updated on these copied files, only the creation time.

You need to use filectime with filemtime to assure you get copied files that aren’t modified but are obviously new.

when working with swf files (flash animations), there is a nice way to avoid the browser cache. i used to do this by hand, then i used a random number, but with large animations while working online, it gets boring because the server always downloads the whole animation, even if there was no change.
but.

изменение последнего измененного времени файла с помощью touch() и получение результата с помощью filemtime()

Итак, я пытаюсь получить последнюю измененную дату файла, а затем обновить его до текущего времени, но когда я посмотрю на результат I получить ту же метку времени и в $ Oldtime и $ newtimeизменение последнего измененного времени файла с помощью touch() и получение результата с помощью filemtime()

Возможно, у вас нет достаточных прав, проверьте возвращаемое значение прикосновения. – luk2302

Вы используете linux на сервере? touch() работает только под Windows в соответствии с документацией. –

@KAbhishek какая документация? ‘touch()’ не работал под окнами до php 5.3.0, и он всегда работал под другой ОС. –

ответ

использование clearstatcache после touch ИНГОВ файла, чтобы получить правильное значение времени модификации.

Поскольку вы использовали filemtime раньше, результат для него был кеширован, а при втором вызове результат вытягивается из этого кеша вместо проверки файла напрямую.

filemtime возвращает одно и то же значение до и после изменения файла

Я пытаюсь получить время последнего изменения файла до и после записи в него с помощью fwrite. Но я получаю те же значения по какой-то причине.

Теперь я изменяю log.txt с помощью текстового редактора примерно за минуту до запуска этого скрипта. Так что я должен получить разницу в 40-60 секунд. Если бы кто-то мог указать на то, что здесь происходит, это было бы очень признательно. Спасибо.

2 ответа

В документации filemtime говорится, что результаты этой функции кэшируются. Может быть, вы можете попробовать это с clearstatcache :

Илон Маск рекомендует:  Сортировка вставками
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL