Рекурсивный итератор php не может переименовать файл

У меня проблема с RecursiveIteratorIterator при переходе к следующему элементу. У меня есть каталог, в котором есть несколько файлов, и я пытаюсь перейти к каждому файлу, переименовать его и выполнить с ним другие действия. RecursiveIteratorIterator выбирает первый файл из каталога и успешно переименовывает его. Когда я делаю $it->next(), он остается в том же файле и пытается найти файл, который уже был переименован во что-то другое. Ниже приведен мой пример кода. Разрешение файла установлено на 777. Любые идеи будут оценены.

Это происходит только если я переименую файл. Если я уберу функцию переименования, она перейдет к следующему пункту, как и ожидалось

   //initialize iterator object
  $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())) {

        //direcotry not writable, throw error

    } else {

        // get current file info
        $fileinfo = pathinfo($it->getSubPathName());

        //get file extension
        $ext = $fileinfo['extension'];

        //if its a '.', move to next item
        if (in_array($fileinfo['filename'], array(".", ".."))) {
            $it->next();
        }

        // the current file name with complete path
        $old_file = $directory . '/' . $it->getSubPathName();
        throw new Exception('source file doesnot exist ' . $old_file, error::DOESNOTEXIST);
        }

        //generate new file name with path
        $new_file = $directory . '/' . $it->getSubPath() . '/' . $filename . '.' . $ext;

        //rename the file
        rename($old_file, $new_file);

    }

}
/*             * * move to the next iteration ** */
$it->next();

}

0 ответов

Другие вопросы по тегам