【问题标题】:PHP - Rename files in directory after sorting them alphabeticallyPHP - 按字母顺序排序后重命名目录中的文件
【发布时间】:2013-06-03 15:27:10
【问题描述】:

我有这个奇怪的问题。

我的文件名为 1.jpg、2.jpg、3.jpg、4.jpg、5.jpg。

现在,我希望人们能够对它们进行排序,所以我想,例如,如果你想让 3 变成 2,那么你所要做的就是重命名 3.jpg ==> 1b.jpg。这使他介于 1 和 2 之间!

现在只需重命名文件夹中的所有文件,瞧! 但是,这似乎不起作用...

我的代码是:

// Part 1

$fileUp = $_POST['imageURL'];
$url = $_SERVER['DOCUMENT_ROOT'].$fileUp;
$fileParts = pathinfo($fileUp);
$fileName = $fileParts['filename'];
$fileExt = $fileParts['extension'];
$fileFolder = $fileParts['dirname'];
$newName = $fileName - 2;
$newFullName = $newName . 'b.' . $fileExt;

$directory = $_SERVER['DOCUMENT_ROOT'].$fileFolder.'/';

rename($url, $directory.$newFullName);

// Part 2

$dirFiles = array();
if ($handle = opendir($directory)) {
    while (false !== ($file = readdir($handle))) {  
        if ($file != "." && $file != "..") {
            $dirFiles[] = $file;
        }
    }
    closedir($handle);
}

sort($dirFiles);
$i = 1;
foreach($dirFiles as $file)
{
    $fileParts = pathinfo($file);
    $fileExt = $fileParts['extension'];
    $newName = $i . '.' . $fileExt;
    rename($directory.$file, $directory.$newName);
    $i++;
}

第 1 部分实质上是重命名要升级的文件。这行得通! 但是,如果我随后使用 readdir 重新加载文件,则该图像不在应有的位置(通常在最后)。

所以第 2 部分是关于重命名所有文件。 但是,当我启用第 2 部分时,要升级的图像之前的图像消失了!

例如,如果我有“1.jpg, 2.jpg, 3.jpg”,并且我想要 2.jpg,我最终会得到: “2.jpg, 3.jpg”(2和3没改名字,1.jpg干脆消失了……)

非常感谢所有帮助!

【问题讨论】:

    标签: php file sorting rename


    【解决方案1】:

    我不推荐用这种方式对图像进行排序,它既低效,而且据我所知,如果人们继续排序,你最终会得到又长又笨拙的文件名。 您有权访问数据库吗?您可以在那里有一个表,它将索引映射到文件名,从而允许您通过更改表条目的索引来进行排序。

    【讨论】:

    • 是的,我确实可以访问数据库,但这似乎是更简单的方法。顺便说一句,用户只允许上传 10 张图片,所以最终不会那么长......但是好吧,我明白了。这些文件实际上是由用户上传的,每个文件都有自己的目录。任何建议如何处理上传文件名中可能包含不正确字符(括号、空格...)的文件的人?
    • 这可能是一个解决方案: $remove_these = array(' ','`','"','\'','\\','/'); $newname = str_replace( $remove_these, '', $_FILES['image']['name']);
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2015-02-02
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2022-01-22
    相关资源
    最近更新 更多