Как переименовать файлы?

StrikeOFF

♥kan inte lyfta utan lift♥
Регистрация
20 Мар 2010
Сообщения
372
Реакции
204
PHP:
<?php
$dir1 = "E:/documents/images/test/dir1";
$dir2 = "E:/documents/images/test/dir2";
if (is_dir($dir1)) {
    if ($dh = opendir($dir1)) {
        while (($file = readdir($dh)) !== false) {
            if(($file !== ".")&&($file !== ".."))
            {
         
                $file_array = file("E:/documents/images/test/dir2/2.txt");
                    $finished = false;
                    while($finshed !== false)
                    {
                        while ( list( $line_num, $line ) = each($file_array ) )
                        {
                        rename($dir1."/".$file, $dir2."/".$line); 
                        }
                    } 
            }
        }
        closedir($dh);
    }
}
 
//Выход:
//Warning: rename(E:/documents/images/test/dir1/0c030e7655d44a708cac42bf791a8520.jpeg,E:/documents/images/test/dir2/abandonment ) [function.rename]: Синтаксическая ошибка в имени файла, имени папки или метке тома. (code: 123) in Z:\home\lesson.com\www\check.php on line 17
?>

Есть фал в котором каждая новая строка - будущее название файла.
Есть директория в которой масса файлов.
Нужно чтобы до тех пор пока в файле 2.txt (есть строки | пока не использовали все строки по 1му разу | пока есть файлы в директории) {переименовывать фалы в имена строк}

Как то так. Помогите хотя бы сделать чтобы вот этот вариант нормально переименовывал а не один файл как сейчас. На выходе как видно идут вот такие ошибки. на выходе меняется только вторая часть функции - abandonment .
 
Попробуй:
copy()
unlink()
 
Минимум 2 существенные ошибки: чтение файла в цикле чтения директории;
нет trim`a для имени файла - перевод каретки недопустим в именовании файлов

И тот код, что привел ТС, у меня даже с ошибками не пошел, вот рабочий:
PHP:
$dir1 = 'E:/documents/images/test/dir1';
$dir2 = 'E:/documents/images/test/dir2';
if (is_dir($dir1)) {
    if ($dh = opendir($dir1)) {
        $file_array = file('E:/documents/images/test/dir2/2.txt');
        while (($file = readdir($dh)) !== false && count($file_array) > 0) {
            if(($file !== ".")&&($file !== ".."))
            {
                $new_file_name = trim(array_shift($file_array));
                rename($dir1."/".$file, $dir2."/".$new_file_name);
            }
        }
        closedir($dh);
    }
}

PS: помимо трима, стоит для $new_file_name сделать str_replace недопустимых файловой системой символов.
 
Назад
Сверху