更改文件名后,它进入父目录

After changing name of a file it goes parent directory

我正在编写一个 PHP 代码,它从 input.txt 文件中获取名称,并使用这些名称更改图像文件夹中文件的名称。

我的代码是:

<?php
$array = explode(".png", file_get_contents('input.txt'));

$directory='C:\wamp64\www\Replace image names with input\images';
$extension = '.png';
$a=0;
$newName='';

$dir = "images/*";

foreach(glob($dir) as $file)
{
    if(!is_dir($file)) {
        echo basename($file)."\n";
        $newName=$array[$a].".png";
        rename($file, $newName);
        $a++;
    }
}    
?>

它有效,但最后,'image' 文件夹中的文件转到 C:\wamp64\www\Replace image names with input directory。 (父目录)

知道为什么会这样吗?

根据 splash58 的评论:

使用scandir($directory)代替glob($dir)

为了更清楚。这是您的代码正在执行的操作:

$dir = "images/*";

foreach(glob($dir) as $file) {
// at this point $file === "images/filename"
    if(!is_dir($file)) {
        echo basename($file)."\n";
        $newName=$array[$a].".png";
// You set the $newName to newname.png
        rename($file, $newName);
// you replace "images/filename" with "newname.png"
        $a++;
    }
}

实际上您已经编写了一个移动和重命名函数。为简单起见,您可以这样做:

$newName="images/".$array[$a].".png"

我完全理解你的担心。我用重命名函数尝试了你的代码,但遇到了同样的问题。解决方案是提供包含要重命名和替换的图像的目录的绝对路径作为第二个参数。做这个: ... 重命名($file,“图像/”。$newname); ...

这对我有用 - 重命名并用新命名文件替换所有旧文件。