gpt4 book ai didi

php - 如何使用 filemtime 按上次修改时间移动所有文件

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:37 25 4
gpt4 key购买 nike

引用这个question , 我发现很难使用 filemtime(); 来找出文件夹中文件的最后修改时间。

我需要将所有已经在 __DIR__ .'/../uploads/media'; 中的文件移动到 __DIR__ .'/../uploads/media/YY/mm'; 基于他们的最后修改时间。

这里是我的函数:

function grab_pictures() {
$mpath = __DIR__ .'/../uploads/media';

foreach (glob("$mpath/*") as $file) {
//find timestamp of last modified time
$lastmoddate = filemtime($file);
//grab only the filename with extension for newPath
$basename = basename($file);
//takes month from timestamp
$month = date("m", filemtime($lastmoddate));
//takes Year from timestamp
$year = date("Y", filemtime($lastmoddate));
//creates new folders /Year/month/ based on last modified time of each file
$newPath = __DIR__ .'/../uploads/media/' .$year. '/' .$month. '/';

if (!is_dir($newPath)) {
mkdir($newPath, 0775, true);
}

$newName = '/' .$year. '/' .$month. '/' .$basename;

//change path in MySQL
$this->db->query(sprintf("UPDATE `images` SET `path` = '%s', `time` = 'time'", $newName));

// Move files from old to the new path
move_uploaded_file($basename, $newPath);
}

}

我的函数有什么问题?没有文件被移动,只创建了一个文件夹(1970/01)

解决方案

可能还有其他更好的方法,但这是我的解决方案:

function grab_pictures() {
$mpath = __DIR__ .'/../uploads/media';

foreach (glob("$mpath/*") as $file) {
$lastmoddate = filemtime($file);
$basename = basename($file);
$month = date("m", $lastmoddate);
$year = date("Y", $lastmoddate);
$newPath = __DIR__ .'/../uploads/media/' .$year. '/' .$month. '/';

if (!is_dir($newPath)) {
mkdir($newPath, 0775, true);
}

$newName = '/' .$year. '/' .$month. '/' .$basename;

$old_Path = $mpath. '/' .$basename;
$new_Path = $mpath.$newName;

$this->db->query(sprintf("UPDATE `images` SET `path` = '%s', `time` = `time` WHERE `art` = '%s'", $newName,$basename));

// Move the file
rename($old_Path, $new_Path);
}

}

最佳答案

//takes month from timestamp   
$month = date("m", filemtime($lastmoddate));
//takes Year from timestamp
$year = date("Y", filemtime($lastmoddate));

为什么要在时间戳上使用 filemtime?试试这个:

//takes month from timestamp   
$month = date("m", $lastmoddate);
//takes Year from timestamp
$year = date("Y", $lastmoddate);

你应该使用rename而不是 move_uploaded_file

关于php - 如何使用 filemtime 按上次修改时间移动所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39163145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com