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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
tundramani
Отправлено: 31 Октября, 2018 - 11:52:08
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




На сервере есть папка документов которую надо сканировать.
Каждый документ это отдельная папка внутри которой есть файлы и папки.
Надо отсканировать папку и послать клиенту такой JSON:

CODE (htmlphp):
скопировать код в буфер обмена
  1. {
  2. имя_папки_докумета : [ имя_файла, имя_папки, ... ],
  3. имя_папки_докумета : [ имя_файла, имя_папки, ... ],
  4. имя_папки_докумета : [ имя_файла, имя_папки, ... ],
  5. ...
  6. }


Нужен аналог этого js-псевдокода:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. var object = {}
  3. var array = scandir('./documents')
  4. for (var x=0; ф < array.length; x++)
  5. {
  6. object[ array[x] ] = scandir( './documents/' . array[x] )
  7. }
  8. var json = JSON.stringify(object)

(Отредактировано автором: 31 Октября, 2018 - 13:38:28)

 
 Top
Строитель Модератор
Отправлено: 31 Октября, 2018 - 15:10:43
Post Id



Участник


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


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




tundramani
Спойлер (Отобразить)
?
 
 Top
tundramani
Отправлено: 31 Октября, 2018 - 15:27:17
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




Строитель спасибо, попробую, но я не понимаю этот код

оч прошу вас сделать аналог моего js-псевдокода

мне надо попроще
 
 Top
Строитель Модератор
Отправлено: 31 Октября, 2018 - 15:30:30
Post Id



Участник


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


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




tundramani, так это и есть аналог вашего js-варианта. А чтоб понять, как он работает, сохраните код из моего листинга в php-файл и запустите его в браузере (разумеется, файл должен быть на сервере). Всё, что файл сгенерирует, вы увидите в браузере.
 
 Top
tundramani
Отправлено: 31 Октября, 2018 - 15:37:38
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




Строитель спасибо

(Отредактировано автором: 01 Ноября, 2018 - 12:58:06)

 
 Top
tundramani
Отправлено: 01 Ноября, 2018 - 12:53:10
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




Строитель, прошу вас немного модифицировать ваш код

тз изменилось:

Цитата:
у меня есть одна папка /documents
в ней только папки - каждый документ это папка с данными: файлы и папки
нужно в каждой найти в корне имя единственного html-файла - поиск по расширению .html - других html-файлов нет


json такой:
CODE (htmlphp):
скопировать код в буфер обмена
  1. {
  2. 'имя_папки_докумета' : 'имя_файла',
  3. 'имя_папки_докумета' : 'имя_файла',
  4. 'имя_папки_докумета' : 'имя_файла',
  5. ...
  6. }

(Отредактировано автором: 01 Ноября, 2018 - 13:31:06)

 
 Top
Строитель Модератор
Отправлено: 01 Ноября, 2018 - 14:09:35
Post Id



Участник


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


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




tundramani пишет:
нужно в каждой найти в корне имя единственного html-файла
Рекурсивно искать? Т.е., тут "каждый документ это папка с данными: файлы и папки" - папки могут быть вложены? Или структура такая:

CODE (html):
скопировать код в буфер обмена
  1.  
  2. /documents
  3. ..../dir1
  4. ..../dir2
  5. ......../file1.html
  6. ......../file2.html
  7. ..../dir3
  8. ..../file3.html
  9.  


?
 
 Top
tundramani
Отправлено: 01 Ноября, 2018 - 14:17:32
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




CODE (html):
скопировать код в буфер обмена
  1.  
  2. /documents
  3. ..../dir1
  4. ..../dir2
  5. ......../file1.html
  6. ..../dir3
  7.  


в папке documents находятся однотипные папки
названия этих папок это id документов
внутри них есть однотипные данные: файлы и папки - один из которых это сам документ *.html

таким образом мои документы имеют уникальный id (имя папки)
и переменчивое имя единственного html-файла внутри папки документа
все что мне нужно в этой функции - получить все id и имена документов

(Отредактировано автором: 01 Ноября, 2018 - 14:21:12)

 
 Top
Строитель Модератор
Отправлено: 01 Ноября, 2018 - 14:32:12
Post Id



Участник


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


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




tundramani,
PHP:
скопировать код в буфер обмена
  1. $dir = __DIR__ . '/documents';
  2. $object = [];
  3.  
  4. foreach (scandir($dir) as $item) {
  5.     $temp = $dir . DIRECTORY_SEPARATOR . $item;
  6.     if ($item != '.' && $item != '..' && is_dir($temp)) {
  7.         foreach (scandir($temp) as $elem) {
  8.             if ($elem != '.' && $elem != '..') {
  9.                 $object[$item] = $elem;
  10.             }
  11.         }
  12.     }
  13. }
  14.  
  15. $json = json_encode($object);
  16. print_r( $json );
 
 Top
tundramani
Отправлено: 01 Ноября, 2018 - 14:37:51
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




не понимаю что такое __DIR__

и не вижу в коде поиск по расширению

(Отредактировано автором: 01 Ноября, 2018 - 14:38:50)

 
 Top
Строитель Модератор
Отправлено: 01 Ноября, 2018 - 14:40:26
Post Id



Участник


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


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




tundramani пишет:
не понимаю что такое __DIR__
Учитесь пользоваться поисковой системой - без неё никак в этой сфере деятельности: Волшебные константы
(Добавление)
tundramani пишет:
и не вижу в коде поиск по расширению
В поиске по расширению вроде бы небыло необходимости, т.к.:
Цитата:
однотипные данные: файлы и папки - один из которых это сам документ *.html
Вот вариант с поиском по расширению:
PHP:
скопировать код в буфер обмена
  1. $dir = __DIR__ . '/documents';
  2. $object = [];
  3.  
  4. foreach (scandir($dir) as $item) {
  5.     $temp = $dir . DIRECTORY_SEPARATOR . $item;
  6.     if ($item != '.' && $item != '..' && is_dir($temp)) {
  7.         foreach (scandir($temp) as $elem) {
  8.             if ($elem != '.' && $elem != '..' && strstr($elem, '.') == '.html') {
  9.                 $object[$item] = $elem;
  10.             }
  11.         }
  12.     }
  13. }
  14.  
  15. $json = json_encode($object);
  16. print_r( $json );
 
 Top
tundramani
Отправлено: 01 Ноября, 2018 - 14:51:06
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




я посмотрет волшебные константы - но непонял

вообще php для меня слишком сложен и запутан
в js я не испытываю никаких проблем

а если просто так сделать:


(Добавление)
код выдает ошибку:

PHP Parse error: syntax error, unexpected '[' in /Applications/MAMP/htdocs/сканир овать_документы.php on line 3
 
 Top
Строитель Модератор
Отправлено: 01 Ноября, 2018 - 15:08:07
Post Id



Участник


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


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




tundramani пишет:
а если просто так сделать
Да, можно и так - это зависит от расположения php-скрипта. У меня к примеру на рабочем ПК php не установлен, и для тестирования скриптов я использую вывод в консоль. И в моём случае относительные ссылки вида ./ или ../ не подходят, поэтому используется константа __DIR__ -- для получения пути к скрипту от корня диска.

На счёт магических констант - если вы не понимаете их предназначения, это означает что вам было лень прочитать материал по ссылке.
tundramani пишет:
PHP Parse error: syntax error, unexpected '[' in /Applications/MAMP/htdocs/сканир овать_документы.php on line 3
Версия php у вас древняя однако. Заменяйте объявление массива $object = []; на устаревший аналог $object = array();
 
 Top
tundramani
Отправлено: 01 Ноября, 2018 - 15:10:15
Post Id


Новичок


Покинул форум
Сообщений всего: 17
Дата рег-ции: Окт. 2018  


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




у меня PHP 5.2.1 - может быть поэтому не работает?

исправил на $object = array();

Спойлер (Отобразить)


опять:

PHP Warning: Invalid argument supplied for foreach() in /Applications/MAMP/htdocs/сканир овать_документы.php on line 5

(Отредактировано автором: 01 Ноября, 2018 - 15:16:41)

 
 Top
Строитель Модератор
Отправлено: 01 Ноября, 2018 - 15:44:58
Post Id



Участник


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


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




tundramani, ну тогда вооружайтесь терпением и вперёд исправлять ошибки )
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB