重命名导致文件访问时间更改

时间:2012-11-11 02:52:46

标签: php

我正在尝试在同一文件系统上的目录之间移动文件。我遇到的困难是,当我使用rename()时,文件系统上的文件的文件访问时间会发生变化。

我尝试将shell_exec()与mv一起使用,但由于某种原因,当我以这种方式调用mv时,它会复制文件,然后删除需要更长时间的原始文件。

有没有办法在不改变访问时间的情况下快速移动文件?或者我可以在致电rename()后将其更改回去吗?

2 个答案:

答案 0 :(得分:1)

作为一般规则,当rename()之类的函数或访问文件的任何其他函数执行此操作时,文件的访问时间必须

至于更改文件的访问时间。这只能使用touch函数,如手册中所述:

bool touch ( string $filename [, int $time = time() [, int $atime ]] )
  

尝试将filename参数中指定的文件的访问和修改时间设置为及时给定的值。请注意,无论参数的数量如何,始终都会修改访问时间。

如您所见,时间参数在手册中描述为:

touch time
  

如果未提供时间,则使用当前系统时间。

以下是从文件一小时设置访问时间的同一页面的示例:

<?php
    // This is the touch time, we'll set it to one hour in the past.
    $time = time() - 3600;

    // Touch the file
    if (!touch('some_file.txt', $time)) {
        echo 'Whoops, something went wrong...';
    } else {
        echo 'Touched file with success';
    }
?>

但是,请注意触控功能,如尝试更改文件所述。如果您没有权限,例如该函数将返回false。 (并且不会更改文件时间)

干杯

答案 1 :(得分:1)

您可以使用fileatime临时存储文件的访问时间,并使用touch进行修改。

$filename = 'somefile.txt';
$original_timestamp = fileatime($filename);
// .. modify file here ..
touch($filename, $original_timestamp);