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
Форумы портала PHP.SU :: Версия для печати :: Каталогизатор файлов?
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Каталогизатор файлов?

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

1. ParadigmX - 28 Августа, 2016 - 01:08:24 - перейти к сообщению
Помогите пожалуйста реализовать скрипт сортировки файлов по папкам,
допустим есть каталог \TestFile
В нем много файлов разных форматов .jpg, .zip, .mp4 итд.
нужно их разбросать по папкам с именами относительно форматов JPG, ZIP, MP4.
Как это реализовать?
2. dcc0 - 28 Августа, 2016 - 01:45:23 - перейти к сообщению
В лоб:
scandir
preg_match по расширению
И копирование в нужную папку
В конце проверку, скопировались ли файлы, какое их кол-во,
после сего можно дейстроить TestFile
3. ParadigmX - 28 Августа, 2016 - 02:44:40 - перейти к сообщению
dcc0 пишет:
В лоб:
scandir
preg_match по расширению
И копирование в нужную папку
В конце проверку, скопировались ли файлы, какое их кол-во,
после сего можно дейстроить TestFile


Спасибо если не сложно потому как я новичок сможешь привести какие то примеры кода?
4. dcc0 - 29 Августа, 2016 - 00:03:00 - перейти к сообщению
Я не очень хорошо пишу код и пишу очень медленно, но вот. Можно обойтись без циклов. Есть директория 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);
5. armancho7777777 - 29 Августа, 2016 - 07:45:58 - перейти к сообщению
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.
6. dcc0 - 29 Августа, 2016 - 17:27:23 - перейти к сообщению
Вообще, ещё кроме копирования есть функция link - создание жёстких ссылок, но у меня не работает.

 

Powered by ExBB FM 1.0 RC1