PHP: ¿cómo puedo obtener la fecha de creación del archivo?


Estoy leyendo una carpeta con muchos archivos.

Cómo puedo obtener la fecha de creación de un archivo. No veo ninguna función directa para conseguirlo.

Hay filemtime y filectime.

Y si el archivo no ha sido modificado, ¿qué pasará?

 62
Author: franzlorenzon, 2010-12-09

5 answers

Use filectime. Para Windows devolverá el tiempo de creación, y para Unix el tiempo de cambio que es el mejor que puede obtener porque en Unix no hay tiempo de creación (en la mayoría de los sistemas de archivos).

Tenga en cuenta también que en algunos textos Unix ctime de un archivo se conoce como siendo el tiempo de creación del archivo. Esto está mal. No hay creación tiempo para archivos Unix en la mayoría de Unix sistemas de archivos.

 80
Author: Alin Purcaru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-09 17:44:27

Desafortunadamente, si se está ejecutando en Linux, no puede acceder a la información, ya que solo se almacena la última fecha de modificación.

Depende ligeramente de tu sistema de archivos tho. Sé que ext2 y ext3 no son compatibles con el tiempo de creación, pero creo que ext4 sí.

 6
Author: mrwooster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-09 17:46:43
$filename = 'somefile.txt';

if (file_exists($filename)) {

    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename));
}
 4
Author: Rakesh Dongarwar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-11 19:32:05

Hay una solución para Mac OS X que admite la hora de creación de fecha en su sistema de archivos: ¿Cómo obtengo la hora de creación real para un archivo en PHP en un Mac?

 1
Author: Sunny Reborn Pony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:36

Sé que este tema es super viejo, pero, en caso de que alguien esté buscando una respuesta, como yo, estoy publicando mi solución.

Esta solución funciona SI no le importa tener algunos datos adicionales al principio de su archivo.

Básicamente, la idea es, si el archivo no existe, crearlo y añadir la fecha actual en la primera línea. A continuación, puedes leer la primera línea con fgets(fopen($file, 'r')), convertirla en un objeto DateTime o cualquier cosa (obviamente puedes usarla raw, a menos que la guardes en un formato extraño) y voila-usted tiene su fecha de creación! Por ejemplo, mi script para actualizar mi archivo de registro cada 30 días se ve así:

if (file_exists($logfile)) {
            $now = new DateTime();
            $date_created = fgets(fopen($logfile, 'r'));
            if ($date_created == '') {
                file_put_contents($logfile, date('Y-m-d H:i:s').PHP_EOL, FILE_APPEND | LOCK_EX);
            }
            $date_created = new DateTime($date_created);
            $expiry = $date_created->modify('+ 30 days');
            if ($now >= $expiry) {
                unlink($logfile);
            }
        }
 -2
Author: SDukla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 11:28:18