Php переименование всех файлов

Копирование, переименование и перемещение файлов в PHP

В статье продолжается описание способов работы с файлами в PHP и применение различных функций для управления ими. Информацию по созданию и записи файлов можно найти в статье «Создание, открытие, чтение, запись, удаление и проверка наличия файла в PHP». Здесь рассматривается работа с уже существующими файлами.

Копирование файла

Для копирования файла применяется функция copy. В ней должны быть заданы директория к исходному файлу и путь к новому создаваемому файлу. Путь можно задавать абсолютным адресом, то есть с указанием всех каталогов от корня. Можно так же задавать относительный путь.

Если файл скопирован, функция вернет значение True. Если копирование не выполнено, то будет возвращено значение False.

if (copy("myfile.txt", "newfile.txt"))
echo "Файл скопирован";
else
echo "Файл не был скопирован";

Если файл с заданным именем в директории уже есть, старый файл будет заменен новым с тем же именем. Поэтому, при копировании, стоит проверять, не существует ли файл в новой директории. Такую проверку выполняет функция file_exists.

$new_filename = "newfile.txt";

if (file_exists($new_filename))
echo "Такой файл уже существует";
else
if (copy("myfile.txt", "newfile.txt"))
echo "Файл скопирован";
else
echo "Файл не был скопирован";

Переименование и перемещение файла

Переименование и перемещение файла можно выполнить одной функцией rename.

Для переименования в параметрах функции указывается имя исходного файла, а вторым параметром, задается новое имя.

rename("myfile.txt", "newname.txt");

При удачном выполнении функции, возвращается результат True, в противном случае False.

if (rename("myfile.txt", "newname.txt"))
echo "Файл переименован";
else
echo "Файл не был переименован";

Для перемещения файла, задается новый путь к файлу:

rename("myfile.txt", "newfolder/myfile.txt");

Понятно, что при необходимости, и перемещение и переименование файла можно выполнить одновременно. Для этого достаточно в новом пути задать новый каталог и новое имя файла.

rename("myfile.txt", "newfolder/newfile.txt");

Источник

rename

Пытается переименовать oldname в newname , перенося файл между директориями, если необходимо. Если newname существует, то он будет перезаписан.

Список параметров

Замечание:

Старое имя. Обёртка, используемая в oldname должна совпадать с обёрткой, используемой в newname .

Замечание: Поддержка контекста была добавлена в PHP 5.0.0. Для описания контекстов смотрите раздел Потоки.

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.3.1 rename() теперь может переименовывать файлы между дисками в Windows.
5.0.0 rename() теперь также может быть использована с некоторыми обёртками URL. Обратитесь к Поддерживаемые протоколы и обработчики (wrappers) для получения списка обёрток, которые поддерживают rename() .
4.3.3 rename() теперь может переименовать файлы, находящиеся на другом разделе в ОС, основанных на *nix, подразумевая, что предоставлены соответствующие права на эти файлы. Могут быть сгенерировано предупреждение, если результирующая файловая система не позволяет совершать на файлах системные вызовы chown() или chmod() — например, если результирующей файловой системой является FAT.

Примеры

Пример #1 Пример использования функции rename()

Источник

Использование php для переименования всех файлов в папке

новый программист php. Я пытаюсь переименовать все файлы в папке, заменив расширение.

Код, который я использую, – это ответ на аналогичный вопрос о SO.

if ($handle = opendir('/public_html/testfolder/')) < while (false !== ($fileName = readdir($handle))) < $newName = str_replace(".php",".html",$fileName); rename($fileName, $newName); >closedir($handle); 

Я не получаю ошибок при запуске кода, но никаких изменений в именах файлов не происходит.

Любое понимание того, почему это не работает? Мое разрешение должно позволять это.

EDIT: я получаю пустую страницу при проверке возвращаемого значения rename (), теперь пытаюсь что-то с glob (), что может быть лучшим вариантом, чем opendir …?

EDIT 2: Ниже приведенный ниже фрагмент кода, я могу распечатать содержимое $ newfiles. Таким образом, массив существует, но фрагмент str_replace + rename () не может изменить имя файла.

$files = glob('testfolder/*'); foreach($files as $newfiles) < //This code doesn't work: $change = str_replace('php','html',$newfiles); rename($newfiles,$change); // But printing $newfiles works fine print_r($newfiles); > 

Вероятно, вы работаете в неправильном каталоге. Убедитесь, что префикс $ fileName и $ newName указан в каталоге.

В частности, opendir и readdir не сообщают никакой информации о текущем рабочем каталоге для переименования. readdir возвращает имя файла, а не его путь. Таким образом, вы просто переименовываете имя файла.

Что-то вроде ниже должно работать лучше:

$directory = '/public_html/testfolder/'; if ($handle = opendir($directory)) < while (false !== ($fileName = readdir($handle))) < $newName = str_replace(".php",".html",$fileName); rename($directory . $fileName, $directory . $newName); >closedir($handle); > 
// your folder name, here I am using templates in root $directory = 'templates/'; foreach (glob($directory."*.html") as $filename)

Выше кода преобразует весь .html файл в .php

работает? Вы проверили это? Потому что кажется, что здесь может отсутствовать некоторый Document Root …

$directory = $_SERVER['DOCUMENT_ROOT'].'public_html/testfolder/'; 
if ($handle = opendir($directory)) < while (false !== ($fileName = readdir($handle))) < $newName = str_replace(".php",".html",$fileName); rename($directory . $fileName, $directory . $newName); >closedir($handle); > 

Это происходит, если файл открыт. Тогда php не может вносить никаких изменений в файл.

Большое вам спасибо за предложения. он работает на меня!

Источник

Массовое переименование файлов в папке – PHP

Так что удалите SKU # из имени файла, возможно ли в PHP делать массовое переименование?

Да, просто откройте каталог и создайте цикл для доступа ко всем изображениям и переименуйте их, например:

foreach (array_filter(glob("$dir/WV1716B*.jpg") ,"is_file") as $f) rename ($f, str_replace("SKU#", "", $f)); 

(или $dir/*.jpg если число не имеет значения)

class SKUFilterIterator extends FilterIterator < public function accept() < if (!parent::current()->isFile()) return false; $name = parent::current()->getFilename(); return strpos($name, 'SKU#') !== false; > > $it = new SkuFilterIterator( new DirectoryIterator('path/to/files') ); foreach ($it as $file) < $newName = str_replace('SKU#', '', $file->getPathname()); rename($file->getPathname(), $newName); > 

FilterIterator в основном отфильтровывает все нефайлы и файлы без SKU# в них. Тогда все, что вы делаете, это итерация, объявление нового имени и переименование файла …

Или в 5.3+ с помощью нового GlobIterator :

$it = new GlobIterator('path/to/files/*SKU#*'); foreach ($it as $file) < if (!$file->isFile()) continue; //Only rename files $newName = str_replace('SKU#', '', $file->getPathname()); rename($file->getPathname(), $newName); > 

Шаги по его завершению довольно просты:

  • итерация по каждому файлу с помощью fopen , readdir
  • для каждого файла проанализируйте имя файла в сегментах
  • скопируйте старый файл в новый, называемый старым (соображения разумности)
  • переименуйте корневой файл поверх нового имени.
if ($handle = opendir('/path/to/images')) < /* Create a new directory for sanity reasons*/ if(is_directory('/path/to/images/backup')) < mkdir('/path/to/images/backup'); >/*Iterate the files*/ while (false !== ($file = readdir($handle))) < if ($file != "." && $file != "..") < if(!strstr($file,"#SKU")) < continue; //Skip as it does not contain #SKU >copy("/path/to/images/" . $file,"/path/to/images/backup/" . $file); /*Remove the #SKU*/ $newf = str_replace("#SKU","",$file); /*Rename the old file accordingly*/ rename("/path/to/images/" . $file,"/path/to/images/" . $newf); > > /*Close the handle*/ closedir($handle); > 

Вы также можете использовать этот образец:

$directory = 'img'; $gallery = scandir($directory); $gallery = preg_grep ('/\.jpg$/i', $gallery); // print_r($gallery); foreach ($gallery as $k2 => $v2) < if (exif_imagetype($directory."/".$v2) == IMAGETYPE_JPEG) < rename($directory.'/'.$v2, $directory.'/'.str_replace("#SKU","",$v2)); >> 

Источник

Читайте также:  Docker java heap space
Оцените статью