Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19

PHP перебор директории

20.03.2021, 12:44. Показов 3367. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые пользователи CyberForum. У меня проблема, мне необходимо написать код который в заданной директории будет перебирать все подпапки и находить файл md5 которого будет соответствовать переменной (это не антивирус, до них мне ещё далеко), я вроде бы сделал всё что мог но к сожалению ничего не получается. Я работаю в среде DevelNext (JPHP) и поэтому она поддерживает не все функции php. Вот сам код

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$directory = new File('C:/Program Files/');
        $list = $directory->findFiles();
        print_r($list);
        print_r($signature);
        
        function Scaner ($list){
        foreach ($list as $value) {
        if (fs::isFile($value)) {  
        $md5 = $value->hash('MD5');
        if (in_array($md5, $signature)) {
        $name = fs::name($value);
        $locationfs = fs::abs($value);
        alert("Тест завершён");
        }
        } 
        if (fs::isDir($value)) {
        $directory = new File($value);
        $list = $directory->findFiles();
        print_r($list);
        Scaner($value);
        
        
        } 
        }
        }
Разумеется это незаконченный код. Помогите пожалуйста кто чем может! Буду очень признателен!!!!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2021, 12:44
Ответы с готовыми решениями:

PHP перебор массива
Приветствую форумчане. Я только начал осваивать PHP и тут же столкнулся с проблемой, решение которой никак не приходит в голову. Буду Вам...

Php вывод картинки по id из директории
Добрый день! Я новичок в php. У меня есть страница с картинками (стр.1), картинка - ссылка, ведущая на еще одну страницу(стр.2)....

директории в php
Доброго времени суток. В общем столкнулся с такой проблемой. Есть файл index.php в корневом каталоге, следующего содержания. ...

29
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19
20.03.2021, 15:43  [ТС]
Студворк — интернет-сервис помощи студентам
Спасибо за ваши попытки решить проблему, как только у меня появится возможность я проверю код. Сейчас увы возможности нет.
0
Невнимательный
 Аватар для ft4l
3141 / 1351 / 362
Регистрация: 08.02.2013
Сообщений: 7,894
Записей в блоге: 2
20.03.2021, 15:59

Не по теме:

Как ещё вариант для проверки )) ... возможны ошибки/опечатки

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$signature = array($base = file_get_contents('base.txt'));
var_dump($base, $signature); 
 
function my_Scaner ($path){
    $directory = new File($path);
    foreach ($directory->findFiles() AS $value) {
        if (fs::isFile($value)) {
            $md5 = $value->hash('MD5');
            echo "$md5 $value\n";
            if (in_array($md5, $signature)) {
                echo '-------- Found ------------ '. $value ."\n";
                return $value;
            }
        }
        elseif (fs::isDir($value)) {
            $ret = my_Scaner($value);
            if ($ret) return $ret;
        }
    }
    return 0;
}
 
echo my_Scaner ('C:/Program Files/');



Добавлено через 7 минут
Цитата Сообщение от x_lab Посмотреть сообщение
function my_Scaner ($path)
Нашёл ошибку )
должно быть
PHP
1
function my_Scaner ($path, $signature)
и соответственно
PHP
1
$ret = my_Scaner($value, $signature);
PHP
1
echo my_Scaner ('C:/Program Files/', $signature);
или global
0
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19
22.03.2021, 17:32  [ТС]
Спасибо вам огромное, сканер действительно работает! Только у меня одна небольшая неполадка, при попытке записать полученные данные в ini файл среда не может определить метод который отвечает за запись в ini. Вне кода метод работает отлично. Вот сам код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$signature = array($base = file_get_contents('base.txt'));
        var_dump($base, $signature); 
         
        function my_Scaner ($path, $signature){
            $directory = new File($path);
            foreach ($directory->findFiles() AS $value) {
                if (fs::isFile($value)) {
                    $md5 = $value->hash('MD5');
                    echo "$md5 $value\n";
                    if (in_array($md5, $signature)) { 
                    $this->ini->set($value ."\n", 'file' , 'system');
                        return $value;
                    }
                }
                elseif (fs::isDir($value)) {
                    $ret = my_Scaner($value, $signature);
                    if ($ret) return $ret;
                }
            }
            return 0;
        }
         
        echo my_Scaner ('C:/Program Files/', $signature);
Ошибка:
Fatal error: Uncaught Error: Cannot get 'ini' property of non-object in res://app/forms/MainForm.php on line 144, position 26
Помогите пожалуйста, может я опять делаю что-то не так?
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
22.03.2021, 18:04
наверное такое пытались сделать?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        alert("Тест запущен");
        $files = [];
        $signature = array_flip([
            "8d166f20019fde00050609ddc559245b"
        ]);
        
        $thread = new Thread(function () use (&$files, &$signature) {            
            fs::scan('C:/Program Files/',  function (File $file, $depth) use (&$files, &$signature) {
                if(empty($signature)) {
                    return;
                }
                
                if(array_key_exists($file->hash(), $signature))
                {
                    var_dump("Файл найден. Хеш-сумма совпадает [".$file->hash()."].");
                    $files[$file->hash()] = $file->getPath();
                    unset($signature[$file->hash()]);
                }
            }); 
        });
        $thread->start();
        
        Timer::setInterval(function () use (&$signature, &$thread, &$files) {
            if(empty($signature)){
                var_dump($files);
                $thread->join(0);  
                uiLater(function (){
                    alert("Тест завершен");
                });               
                Timer::cancelAll();
            }
        },100);
Добавлено через 27 минут
Цитата Сообщение от EXTREME1425 Посмотреть сообщение
Ошибка:
Fatal error: Uncaught Error: Cannot get 'ini' property of non-object in res://app/forms/MainForm.php on line 144, position 26
Помогите пожалуйста, может я опять делаю что-то не так?
нужно вызывать в классе/методе, а вы пытаетесь вызвать в функции, что запрещено делать. свойство ini не найдено через $this.
если уж делаете ПО в ДН, то потрудитесь хотя бы почитать как устроена система и немного про ООП php.

Цитата Сообщение от EXTREME1425 Посмотреть сообщение
function my_Scaner ($path, $signature){
в вашем примере попробуйте (хотя могут быть моменты когда $this работает немного по иному - давно не трогал jphp)

PHP
1
function my_Scaner ($path, $signature, $ini){
Цитата Сообщение от EXTREME1425 Посмотреть сообщение
$this->ini->set($value ."\n", 'file' , 'system');
PHP
1
$ini->set($value ."\n", 'file' , 'system');
Цитата Сообщение от EXTREME1425 Посмотреть сообщение
echo my_Scaner ('C:/Program Files/', $signature);
PHP
1
echo my_Scaner ('C:/Program Files/', $signature, $this->ini);
1
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19
22.03.2021, 18:18  [ТС]
к сожалению ваши попытки исправить код не принесли результатов:
Fatal error: Uncaught Error: Missing argument 3 ($ini) for app\forms\my_Scaner() in res://app/forms/MainForm.php on line 150, position 28
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
22.03.2021, 22:04
Я не исправлял ваш код, а лишь дал наводку в каком направлении копать. Исправлять нужно вам и у вас ошибка возникает.

Добавлено через 1 минуту
Если вы пишите код на jphp, то у вашего кода явно с семантикой проблемы.
0
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19
22.03.2021, 22:48  [ТС]
Спасибо вам огромное за ваш великолепный скрипт! Я прекрасно понимаю что уже мягко говоря "достал" всех пользователей своими глупыми вопросами и просьбами, но я бы хотел напоследок кое о чём попросить. Не могли бы вы переделать ваш скрипт чтобы он выводил расположение найденого файла не в консоль а в визуальный объект (label), и чтобы он выводил расположение каждого сканируемого файла в консоль по типу предыдущего кода
PHP
1
echo "$md5 $value\n";
. Ещё раз простите меня за такие запросы, ведь для вас как для профессионала, это ничего не стоит, а я увы ещё не в состоянии реализовать такой скрипт. Прошу вас, выполните мою просьбу и я обещаю больше к вам не приставать. Спасибо!
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
22.03.2021, 23:44
В консоль каждый сканируемых файл - так делать не стоит, так как среда разработки будет висеть и долго потом обрабатывать данные.
Количество файлов может превысить 10000+.
Лучшим вариантом будет если сформировать лог просканированных файлов
А в консоль выводить статистические данные по типу: сколько папок найдено, сколько файлов найдено, и прочее.

Добавлено через 17 секунд
Но это я могу вам сделать немного позже.

Добавлено через 6 минут
Ещё один момент. В моем примере сканирование прерывается как только заканчиваются данные в переменной сигнатур. Сканирование завершено не будет.
0
321 / 189 / 78
Регистрация: 04.10.2016
Сообщений: 809
23.03.2021, 17:22
Лучший ответ Сообщение было отмечено EXTREME1425 как решение

Решение

не стал заморачиваться на счет вашей идеи, а просто накидал код как пример (далее соображайте сами):

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
        alert("Тест запущен");
        $files = [];
        $signature = array_flip([
            "8d166f20019fde00050609ddc559245b"
        ]);
        
        $thread = new Thread(function () use (&$files, &$signature) {            
            fs::scan('C:/Program Files/',  function (File $file, $depth) use (&$files, &$signature) {
                if(empty($signature)) {
                    return;
                }
                
                if($file->isFile())
                {
                    if(array_key_exists($file->hash(), $signature))
                    {
                        $files[$file->hash()] = $file->getPath();
                        unset($signature[$file->hash()]);
                        uiLater(function () use (&$file){
                            app()->form("MainForm")->textArea->text .=  "PATH: " . $file->getPath() . " | HASH: "  . $file->hash() . "\n";
                        }); 
                    }
                    
                    uiLater(function () use (&$file){
                        app()->form("MainForm")->labelSearch->text = "PATH: " . $file->getPath();
                        app()->form("MainForm")->labelHash->text = "HASH: "  . $file->hash() ;
                        app()->form("MainForm")->labelCountFile->text++;
                    }); 
                }
                else if($file->isDirectory())
                {
                    uiLater(function () use (&$file){
                        app()->form("MainForm")->labelCountDir->text++;
                    }); 
                }                           
            }); 
        });
        $thread->start();
        
        Timer::setInterval(function () use (&$signature, &$thread, &$files) {
            if(empty($signature)){
                var_dump($files);
                $thread->join(0);  
                uiLater(function (){
                    alert("Тест завершен");
                });               
                Timer::cancelAll();
            }
        },100);
Миниатюры
PHP перебор директории  
0
0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19
23.03.2021, 17:49  [ТС]
Ваш скрипт великолепен, это как раз то что я искал! Спасибо вам огромное! Вы гений!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2021, 17:49

Сканер директории PHP
Здравствуйте, ув. форумчане, помогите сделать простенький какой-нибудь сканер директории. В общем полазив по инету я нашёл много чего, но...

Поиск подкаталогов в директории PHP
Всем привет, начал изучать PHP и столкнулся с одним интересным заданием, оно довольно простое, но у меня всё же не выходит его сделать....

Перебор папок и файло в указанной директории.
Всем привет..Возникает трудность написания скрипта..незнаю с чего начать но проблема такая.. скрипт состоит из двух параметров. первый...

Для указанной директории произвести рекурсивный перебор всех вложенных поддиректорий и файлов
Здравствуйте. Нужен совет по одному заданию. "Необходимо для указанной директории произвести рекурсивный перебор всех вложенных...

для указанной директории произвести рекурсивный перебор всех вложенных поддиректорий и файлов с занесением результатов в файл
Необходимо разработать приложение (на языке программирования C++), которое позволяет для указанной директории произвести рекурсивный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru