我遇到了RecursiveIteratorIterator转移到下一个项目的问题。 我有一个目录有多个文件,我试图去每个文件重命名它,并做一些其他的东西。 现在它RecursiveIteratorIterator从目录中选择第一个文件,将其重命名为succesffully,当我执行$ it-> next()时,它会保留在同一个文件中,并尝试查找已经重命名为其他文件的文件。下面是我的代码示例。 文件权限设置为777 任何想法都将不胜感激。
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, 0));
/* * * loop directly over the object ** */
while ($it->valid()) {
/* * * check if value is a directory ** */
if (!$it->isDot()) {
if (!is_writable($directory . '/' . $it->getSubPathName())) {
echo 'Permission Denied: ' . $directory . '/' . $it->getSubPathName() . "\n";
throw new Exception('not writable' . $directory . '/' . $it->getSubPathName(), error::NOTWRITABLE);
} else {
// rename the current file.
$fileinfo = pathinfo($it->getSubPathName());
$ext = $fileinfo['extension'];
if (in_array($fileinfo['filename'], array(".", ".."))) {
$it->next();
}
/* * * the old file name ** */
$old_file = $directory . '/' . $it->getSubPathName();
if (!file_exists($old_file)) {
throw new Exception('source file doesnot exist ' . $old_file, error::DOESNOTEXIST);
}
/* * * the new file name ** */
$new_file = $directory . '/' . $it->getSubPath() . '/' . $filename . '.' . $ext;
/* * * rename the file ** */
if (rename($old_file, $new_file)) {
/* * * a little message to say file is converted ** */
echo $msg = 'Renamed ' . $directory . '/' . $it->getSubPathName() . "<br>";
Logger::newSuccessMessage($msg);
} else {
throw new Exception('renaming file failed' . $directory . '/' . $it->getSubPathName(), error::FAILRENAME);
}
}
}
/* * * move to the next iteration ** */
$it->next();
}