2016-12-18 3 views
-2

Я хочу переименовать все файлы в папку со случайными числами или символами.переименовать все файлы в папке со случайным именем

Это мой код:

$dir = opendir('2009111'); 
$i = 1; 
// loop through all the files in the directory 
while (false !== ($file = readdir($dir))) { 
     // do the rename based on the current iteration 
     $newName = rand() . (pathinfo($file, PATHINFO_EXTENSION)); 
     rename($file, $newName); 
     // increase for the next loop 
     $i++; 
} 
// close the directory handle 
closedir($dir); 

, но я получаю эту ошибку:

Warning: rename(4 (2).jpg,8243.jpg): The system cannot find the file specified

+0

Это звучит как проблема [XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Чего вы пытаетесь достичь, делая это? И какова ошибка, которую вы получаете? – Chris

+2

1. * но эта ошибка *, какая ошибка? 2. Нет смысла использовать переменную '$ i' в цикле' while() '. –

+0

Предупреждение: rename (4 (2) .jpg, 8243.jpg): Система не может найти указанный файл ... – dexter

ответ

0

Вы перекручивание через файлы в каталоге 2009111/, но затем вы обращаетесь к ним без префикса каталога в rename().

Что-то, как это должно работать лучше (хотя увидеть предупреждение о потери данных ниже):

$oldName = '2009111/' . $file; 
$newName = '2009111/' . rand() . (pathinfo($file, PATHINFO_EXTENSION)); 

rename($oldName, $newName); 

Конечно, вы можете поставить имя каталога в переменной или сделать другие аналогичные твики. Я все еще не понимаю, почему вы пытаетесь это сделать, и в зависимости от ваших целей могут быть лучшие способы их достижения.

Предупреждение! Подход, который вы используете, может привести к потере данных! A $newName может быть сгенерирован с тем же именем, что и существующий файл, а rename() перезаписывает файлы-мишени.

Возможно, вы должны убедиться, что $newName не exist перед вами rename().

Смежные вопросы