PHP - переименовать часть нескольких файлов одновременно [duplicate]

Вот хороший способ сделать это

Использовать следующий код:

with temp as  ( 
select count(field1) as summ , field1
from table_name
group by field1 )
select * from temp where summ = (select max(summ) from temp)
11
задан ircmaxell 14 February 2011 в 16:08
поделиться

5 ответов

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

<?php

if ($handle = opendir('/path/to/files')) {
    while (false !== ($fileName = readdir($handle))) {
        $newName = str_replace("SKU#","",$fileName);
        rename($fileName, $newName);
    }
    closedir($handle);
}
?>

Ссылки:

http: // php .net / manual / ru / function.rename.php

http://php.net/manual/en/function.readdir.php

http://php.net/manual/en/function.str-replace.php

22
ответ дан Calum 5 September 2018 в 10:45
поделиться

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

$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));
    }
}
1
ответ дан a.4j4vv1 5 September 2018 в 10:45
поделиться

Ну, используя итераторы:

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);
}
2
ответ дан ircmaxell 5 September 2018 в 10:45
поделиться

кусок торта:

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

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

9
ответ дан Kamil Tomšík 5 September 2018 в 10:45
поделиться

Действия по завершению этого довольно просто:

  • перебирать каждый файл, используя 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);
}
1
ответ дан RobertPitt 5 September 2018 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: