Получать дату создания файла, в PHP, изменив это?

Я нуждаюсь в том, чтобы узнать древность файла. Из-за которого я смотрел в PHP только, смогла быть полученной дата последнего изменения, я тестировал они следующий функции:

http://php.net/manual/es/function.fileatime.php

http://php.net/manual/es/function.filemtime.php

http://php.net/manual/es/function.fstat.php

Они знают какую-то форму?

4
задан 13.11.2019, 12:54
1 ответ

К несчастью опора для стоимости btime ( birth украл или датируй creaciГіn/nacimiento) не estГЎ осуществленный aГєn в PHP (по крайней мере даже она versiГіn 7.3), из-за которого necesitarГЎs помощь внешней программы, чтобы подтверждать вышеупомянутую стоимость.

#include <stdio.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <linux/stat.h>
#include <linux/fcntl.h>

/* Puedes borrar esta función si usas glibc 2.28 o superior */
ssize_t statx(int dfd, const char *filename, unsigned flags,
          unsigned int mask, struct statx *buffer)
{
    return syscall(__NR_statx, dfd, filename, flags, mask, buffer);
}

int main(int argc, char **argv)
{
    struct statx stx;
    int ret;

    /* Iteramos por cada archivo proporcionado por parámetro */
    for (argv++; *argv; argv++) {
        /* Realizamos la llamada al sistema */
        ret = statx(AT_FDCWD, *argv, AT_SYMLINK_NOFOLLOW, STATX_ALL, &stx);
        if (ret < 0) {
            perror(*argv);
            return 1;
        }
        /* Mostramos la marca de tiempo junto con los microsegundos */
        printf("%llu.%09u\n", stx.stx_btime.tv_sec, stx.stx_btime.tv_nsec);
    }
    return 0;
}

Сейчас мы будем должны составлять ее aplicaciГіn используя:

gcc -o btime -Wall btime.c

мы Можем копировать выполнимый произведенный файл btime в algГєn каталог path (как /usr/local/bin/) или оставлять это в каталоге работы PHP, которую мы будем производить:

<?php
function filebtime($archivo) {
    $ret = 0;
    $btime = [];
    exec('./btime ' . escapeshellarg($archivo) . ' 2>&1', $btime, $ret);
    /* Si falló el programa externo o no devolvió datos devolvemos -1 */
    return (($ret !== 0) || (count($btime) === 0)) ? -1 : floatval($btime[0]);
}
echo filebtime('prueba'), PHP_EOL;

Пример с файлом доказательства:

$ touch prueba
$ php stat.php
1573199555.1128333
$ stat prueba
  Fichero: prueba
  Tamaño: 5             Bloques: 8          Bloque E/S: 4096   fichero regular
Dispositivo: fd00h/64768d   Nodo-i: 1049176     Enlaces: 1
Acceso: (0644/-rw-r--r--)  Uid: ( 1000/ redstar)   Gid: ( 1000/ redstar)
Acceso: 2019-11-08 08:23:29.421929356 +0100
Modificación: 2019-11-08 08:23:29.421929356 +0100
      Cambio: 2019-11-08 08:23:29.421929356 +0100
    Creación: -
$ touch prueba
$ stat prueba
  Fichero: prueba
  Tamaño: 5             Bloques: 8          Bloque E/S: 4096   fichero regular
Dispositivo: fd00h/64768d   Nodo-i: 1049176     Enlaces: 1
Acceso: (0644/-rw-r--r--)  Uid: ( 1000/ redstar)   Gid: ( 1000/ redstar)
Acceso: 2019-11-08 09:21:35.499843986 +0100
Modificación: 2019-11-08 09:21:35.499843986 +0100
      Cambio: 2019-11-08 09:21:35.499843986 +0100
    Creación: -
$ php stat.php
1573199555.1128333

PD1: funciГіn statx() был добавлен в glibc 2.28 apoyГЎndose в призыве к системе, если estГЎ доступный или в travГ©s fstatat64() в противоположном случае. Если твоя операционная система использует одну versiГіn недавний glibc, ты можешь удалять ее definiciГіn ее funciГіn (видеть комментарий в cГіdigo).

PD2: Вызов системы statx был добавлен в ней versiГіn nГєcleo Linux 4.11, из-за того, что, если nГєcleo твоей операционной системы он очень старый, возможно, что cГіdigo оно не функционирует, если ты не используешь ее implementaciГіn statx одной versiГіn glibc недавние .

2
ответ дан 24.11.2019, 07:30