Я использую следующий сценарий для переименования изображений в папке. При выполнении первые 2 (новых) имени не работают, поэтому в основном начинается с 3.
function getFileExtension($filename){
return substr($filename, strrpos($filename, '.'));
}
$counter = 1;
if ($handle = opendir('images')) {
while (false !== ($fileName = readdir($handle))) {
$newCounter = str_pad($counter, 3, '0', STR_PAD_LEFT);
$prefix = '11225';
$newName = $prefix.$newCounter;
rename('images/'.$fileName, 'images/'.$newName.getFileExtension($fileName));
$counter++;
}
closedir($handle);
}
Вот предупреждения, которые я получаю,
Warning: rename(images/.,images/11225001.): The process cannot access the file because it is being used by another process. (code: 32) in C:\wamp\apache2\htdocs\renameimages\index.php on line 21
Warning: rename(images/..,images/11225002.): Access is denied. (code: 5) in C:\wamp\apache2\htdocs\renameimages\index.php on line 21
Что мне не хватает?






Первые два - это ссылки на текущую папку и родительскую папку. Вы должны их пропустить.
if ($fileName=='.' || $filename=='..')continue;
Верный. Просто хочу добавить, если у вас есть к нему доступ, я думаю, что использование DirectoryIterator - лучший способ реализовать цикл в целом. У вас есть доступ к таким методам, как isFile, isDot, getExtension, которые в основном выполняют предлагаемую вами проверку или реализованный самим оператором синтаксического анализа расширений.
Я думаю, проблема в том, что функция вызывается внутри
rename()в качестве параметра.