我正在尝试在同一文件系统上的目录之间移动文件。我遇到的困难是,当我使用rename()
文件系统上该文件的文件访问时间时发生了变化。
我尝试shell_exec()
与 mv 一起使用,但由于某种原因,当我以这种方式调用 mv 时,它会复制文件然后删除原始文件,这需要更长的时间。
有什么方法可以在不改变访问时间的情况下快速移动文件?或者我可以打电话后改回来rename()
吗?
我正在尝试在同一文件系统上的目录之间移动文件。我遇到的困难是,当我使用rename()
文件系统上该文件的文件访问时间时发生了变化。
我尝试shell_exec()
与 mv 一起使用,但由于某种原因,当我以这种方式调用 mv 时,它会复制文件然后删除原始文件,这需要更长的时间。
有什么方法可以在不改变访问时间的情况下快速移动文件?或者我可以打电话后改回来rename()
吗?
作为一般规则,当类似 的函数或访问文件的任何其他函数执行此操作时,必须更改文件的访问时间。rename()
至于更改文件的访问时间。这只能使用触摸功能,如手册中所述:
bool touch ( string $filename [, int $time = time() [, int $atime ]] )
尝试将 filename 参数中指定的文件的访问和修改时间设置为 time 中给定的值。请注意,无论参数数量如何,访问时间总是会被修改。
如您所见,时间参数在手册中描述为:
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
. (并且不会更改文件时间)
干杯