RecursiveIteratorIterator移动到下一个不工作

时间:2014-05-26 23:14:24

标签: php recursion

我遇到了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();
    }

0 个答案:

没有答案