Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Каталогизатор файлов?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Сортировка файлов по папкам в зависимости от их формата?
ParadigmX
Отправлено: 28 Августа, 2016 - 01:08:24
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2016  
Откуда: Днепропетровск


Помог: 0 раз(а)




Помогите пожалуйста реализовать скрипт сортировки файлов по папкам,
допустим есть каталог \TestFile
В нем много файлов разных форматов .jpg, .zip, .mp4 итд.
нужно их разбросать по папкам с именами относительно форматов JPG, ZIP, MP4.
Как это реализовать?

(Отредактировано автором: 28 Августа, 2016 - 01:08:54)

 
 Top
dcc0
Отправлено: 28 Августа, 2016 - 01:45:23
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




В лоб:
scandir
preg_match по расширению
И копирование в нужную папку
В конце проверку, скопировались ли файлы, какое их кол-во,
после сего можно дейстроить TestFile


-----
Март 2021. Бросил программирование
 
 Top
ParadigmX
Отправлено: 28 Августа, 2016 - 02:44:40
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Авг. 2016  
Откуда: Днепропетровск


Помог: 0 раз(а)




dcc0 пишет:
В лоб:
scandir
preg_match по расширению
И копирование в нужную папку
В конце проверку, скопировались ли файлы, какое их кол-во,
после сего можно дейстроить TestFile


Спасибо если не сложно потому как я новичок сможешь привести какие то примеры кода?
 
 Top
dcc0
Отправлено: 29 Августа, 2016 - 00:03:00
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Я не очень хорошо пишу код и пишу очень медленно, но вот. Можно обойтись без циклов. Есть директория TestFile и в ней GIF и PNG. Допустим, scandir считывает данные в массив files. Далее все должно быть понятно, применяется функция обратного вызова array_map. В общем, вот так:


PHP:
скопировать код в буфер обмена
  1. $dir="./TestFile";
  2. $files=scandir($dir);
  3. function s_rch($n) {
  4.                 $expansion=substr(strrchr($n, '.'), 1);
  5.                 $fie='./TestFile/'.$n;
  6.                 if(!empty($expansion)) {
  7.                 copy($fie, "./TestFile/$expansion/$n");        
  8.                 }
  9.  

Еще есть функция glob, но вообще не знаю, можно ли рубить имена файлов с subsr,
ведь, наверное могут быть проблемы с кодировкой.
PHP:
скопировать код в буфер обмена
  1. $dir="TestFile";
  2. foreach (glob("$dir/*.*") as $filename) {
  3.         $expansion=substr(strrchr($filename, '.'), 1);
  4.         $name=substr(strrchr($filename, '/'), 1);
  5.    copy($filename, "$dir/$expansion/$name");
  6. }
  7. }
  8. array_map("s_rch", $files);

(Отредактировано автором: 29 Августа, 2016 - 17:08:17)



-----
Март 2021. Бросил программирование
 
 Top
armancho7777777 Супермодератор
Отправлено: 29 Августа, 2016 - 07:45:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1. $path = __DIR__ . '/files';
  2.  
  3. $fsIterator = new CallbackFilterIterator(
  4.     new FilesystemIterator($path),
  5.     function(SplFileInfo $item) {
  6.         return $item->isFile();
  7.     }
  8. );
  9.  
  10. foreach($fsIterator as $file) {
  11.     $mime = (new finfo(FILEINFO_MIME_TYPE))->file($file->getPathname());
  12.     if(!(is_dir($dir = "$path/$mime/"))) {
  13.         mkdir($dir, 0775, true);
  14.     }
  15.     rename($file->getPathname(), $dir . $file->getBasename());
  16. }


Файлы будут перемещены в созданные директории вида:
application/x-gzip
application/pdf
...
image/jpeg
image/png
...
video/x-msvideo // avi
video/mp4
audio/mpeg // mp3

Если и правда
ParadigmX пишет:
много файлов
то доступ к ним будет быстрее, чем свалить, например, все картинки в директорию images.

(Отредактировано автором: 29 Августа, 2016 - 08:36:34)

 
 Top
dcc0
Отправлено: 29 Августа, 2016 - 17:27:23
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Вообще, ещё кроме копирования есть функция link - создание жёстких ссылок, но у меня не работает.


-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с файловой системой и файлами »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB