0 / 1 / 0
Регистрация: 20.03.2021
Сообщений: 19

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

20.03.2021, 12:44. Показов 3397. Ответов 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
3143 / 1358 / 362
Регистрация: 08.02.2013
Сообщений: 7,952
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты 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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru