PHP文件重命名神秘没有错误图像丢失


PHP file renaming mysterious no error images losts

我有一堆随机名称的照片,我想将它们发布到网上,所以它们需要重命名为 1.jpg、2.jpg、3.jpg 等;

我写了以下代码来实现这一点

$i = 1;
if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
            $oldname   = $path.'/'.$file;
            $path_info = pathinfo($oldname);            
            rename($oldname, $path.'/'.($i).'.'.'jpg');
            echo "Old name = <b>".$oldname."</b></br>";
            echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
            $i++;
        }
    }
    closedir($handle);
}

神奇的事情发生了,运行此脚本后文件夹中有 22 个文件,只剩下 14 张名称为 1.jpg,10.jpg 到 22 的图片.jpg当我再次刷新时,只剩下 6 张名称为 1.jpg 到 6 的图片.jpg现在此时即使一次又一次刷新它们也没有改变。

我尝试注释掉rename($oldname, $path.'/'.($i).'.'.'jpg');只是为了看看生成了哪些旧名称和新名称,这些都很好,就像旧名称是什么新名称一样,我想要 1.jpg 到 22 .jpg

我尝试了几乎相同的代码段.JPG扩展名更改为扩展名.jpg因为 linux 服务器对文件命名区分大小写,而 Windows 不是这段代码一直工作正常;

if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
            $oldname   = $path.'/'.$file;
            $path_info = pathinfo($oldname);
            echo $sub= substr($file,0,-4);
            echo "<br>";
            rename($oldname, $path.'/'.($sub).'.'.'jpg');
        }
    }
    closedir($handle);
}

这是印度早上 2:40,我只是一个学生,这个问题不让我进入睡眠模式,请帮助我。

在循环通过 rethinking() 之后,我明白了为什么这段代码不起作用以及为什么它适用于扩展重命名。

重命名功能采用 2 个参数,即文件的旧名称和带有位置的新名称,它也可以移动文件,如果新位置或相同位置中已经存在同名文件,它将简单地覆盖它,不会通过任何错误。

为了理解这一点,让我们举一个例子,摄影文件夹中有 22 张图像,命名为 1.jpg 到 22.jpg但顺序随机,如 1.jpg、10.jpg、15.jpg 等。

然后这段代码需要 1.jpg 并用 1.jpg 重命名它到目前为止还不错,但下次循环时,它将需要 10.jpg(这是文件夹中的第二个文件)并用 2 重命名它.jpg好的,这是代码的预期,但请稍等片刻,已经存在一个名为 2 的文件.jpg它只是被代码覆盖而没有任何错误,从而导致数据丢失。

现在你会说为什么黑客图像按 1.jpg、10 .jpg 的顺序排列,如果存在 2.jpg,为什么它们不按 1.jpg 和 2.jpg 排序?答案很简单,有些图片有.jpg,有些.JPG图片有.JPG优先权。

要克服这个问题,您需要执行大多数软件所做的工作,例如WinRAR,您将需要一个临时文件夹来移动文件,然后将文件再次移动到源文件夹,代码将如下所示。

<?php
$path="test";
$i = 1;
if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
            $oldname   = $path.'/'.$file;
            $path_info = pathinfo($oldname);            
            rename($oldname, "tmp".'/'.($i).'.'.'jpg');
            echo "Old name = <b>".$oldname."</b></br>";
            echo "New name = <b>"."tmp".'/'.($i).'.'.'jpg'."</b></br></br>";
            $i++;
        }
    }
    closedir($handle);
}
$path="tmp";
$i = 1;
if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && is_file($path.'/'.$file)) {
            $oldname   = $path.'/'.$file;
            $path_info = pathinfo($oldname);            
            rename($oldname, "test".'/'.($i).'.'.'jpg');
            echo "Old name = <b>".$oldname."</b></br>";
            echo "New name = <b>".$path.'/'.($i).'.'.'jpg'."</b></br></br>";
            $i++;
        }
    }
    closedir($handle);
}
?>

感谢大家没有帮助我,只是因为你,我自己做了。