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]   

> Без описания
dzheka3d
Отправлено: 03 Августа, 2011 - 22:47:12
Post Id



Гость


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


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




Здравствуйте всем! Подскажите пожалуйста, каким образом можно организовать такую функцию:
есть папка, в ней еще куча папок и в каждой этой папке лежат кучи файлов (в некоторых папках есть еще папки в которых тоже файлы).
Нужно, что бы скрипт выбрал из каждой папки по 3 файла и переместил их в такие же папки в другой директории.
 
 Top
ams
Отправлено: 03 Августа, 2011 - 23:05:13
Post Id



Посетитель


Покинул форум
Сообщений всего: 351
Дата рег-ции: Нояб. 2010  


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




PHP:
скопировать код в буфер обмена
  1.  
  2. $h = opendir(" . ");
  3.  
  4. while($e = readdir($h))
  5. {
  6. if (is_file($e))
  7. {
  8. // выбираешь свой
  9. }
  10. if (is_dir($e))
  11. {
  12. // орять readdir и т.д.. )
  13. }
  14. }
  15.  
 
 Top
dzheka3d
Отправлено: 03 Августа, 2011 - 23:23:24
Post Id



Гость


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


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




У меня всего около 50 папок в некоторых их которых еще по 20-70 это очень много получится if (is_dir($e))
При этом не возможно выбрать папки из папок

Но все равно спасибо за отзыв
 
 Top
Arni
Отправлено: 03 Августа, 2011 - 23:27:23
Post Id



Гость


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


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




dzheka3d пишет:
У меня всего около 50 папок в некоторых их которых еще по 20-70 это очень много получится if (is_dir($e))


Это называется рекурсия.

PHP:
скопировать код в буфер обмена
  1.  
  2. function reedallfiles_($dir,$skip,&$query){
  3.     $file_list = scandir($dir);
  4.     for($i = 0; isset($file_list[$i]); $i++){
  5.        if($file_list[$i] != '.'
  6.        && $file_list[$i] != '..'
  7.        && $file_list[$i] != ''
  8.        && !isset($skip[$dir.'/'.$file_list[$i]])){
  9.           if(is_file($dir.'/'.$file_list[$i])){
  10.               echo $dir.'/'.$file_list[$i];
  11.           }else{
  12.               echo $dir.'/'.$file_list[$i];
  13.               reedallfiles($dir.'/'.$file_list[$i],$skip,$query);
  14.           }
  15.        }
  16.     }
  17. }
  18.  
 
 Top
dzheka3d
Отправлено: 03 Августа, 2011 - 23:36:10
Post Id



Гость


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


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




Спасибо большое, буду разбираться, надеюсь всё получится Улыбка
(Добавление)
Все что мог, пояснил для себя, но что-то не сходится... Или я что-то не так пояснил?

PHP:
скопировать код в буфер обмена
  1.  
  2. function reedallfiles_($dir,$skip,&$query){
  3.     $file_list = scandir($dir); // получаем список файлов и папок и заносим массив в переменную $file_list
  4.     for($i = 0; isset($file_list[$i]); $i++){ // пока существуют элементы массива выполняем:
  5.        if($file_list[$i] != '.' // если имя файла .
  6.        && $file_list[$i] != '..' // если имя файла ..
  7.        && $file_list[$i] != ''  // если файл не имеет имени
  8.        && !isset($skip[$dir.'/'.$file_list[$i]])){ // и не существует файла в дирректории (что такое $skip не понятно)
  9.           if(is_file($dir.'/'.$file_list[$i])){ // если файл существует
  10.               echo $dir.'/'.$file_list[$i]; // выводим адрес файла
  11.           }else{
  12.               echo $dir.'/'.$file_list[$i]; // в противном случае выводим адрес файла
  13.               reedallfiles($dir.'/'.$file_list[$i],$skip,$query); // тут не понятно
  14.           }
  15.        }
  16.     }
  17. }
  18.  
 
 Top
Arni
Отправлено: 04 Августа, 2011 - 00:03:46
Post Id



Гость


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


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




там где вам не понятно, это и есть рекурсия. Функция вызывает сама себя. Тоисть, как только функция находит папку, она вызывает саму себя, и процес как бы переносится в глюбь новой папки, и.т.д аж пока не будет достигнута самая удаленная папка, после чего рекурсия начнет вылазить обратно. Чтобы лутше это понять представьте себе нить, котьрую тянут с корня каталога и через все папки поочереди в глубь и обратно. Рекурсия остановится как только будет обработан последний файл.
 
 Top
dzheka3d
Отправлено: 04 Августа, 2011 - 00:06:31
Post Id



Гость


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


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




Я даже не предполагал что так возможно Улыбка (что бы функция сама себя могла вызвать)
А что означают эти переменные:
?
 
 Top
Arni
Отправлено: 04 Августа, 2011 - 00:15:34
Post Id



Гость


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


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




dzheka3d пишет:
А что означают эти переменные:


Сори это моя фишка и вам это ненадо. Я же не писал это все по новой Улыбка. Взял с готового кода для примера, вот и зацепилось. $skip это массив имен файлов, все имена которые туда внесены будут пропущены. Имя с учетом пути к файлу. &$query это мы передаем указатель на переменную, тоисть при повторном вызове, функция не создает новую переменную, а обращается по указателю на $query. Таким образом мы не теряем информацию на всех уровнях вложенности. в общем если skip, не нужен то можно выкинуть.
 
 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