PHP - 按字母顺序对文件进行排序后重命名目录中的文件

时间:2013-06-07 10:39:15

标签: php file sorting rename

我有这个奇怪的问题。

我的文件名为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只是消失了......)

非常感谢所有帮助!

1 个答案:

答案 0 :(得分:0)

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