Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 124

Поиск файла по папкам

10.09.2014, 20:17. Показов 3132. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Прошу помочь в написание скрипта, которые представляет из себя "поиск файла по папкам".

А именно, имеется:
Уже созданная папка_1, в которой хранится под_папка_1, и в этой под_папки_1 имеется необходимый нам файл, например test.txt .

Папки и под-папки должны отображаться как выпадающее меню типо <select ....>

Вопрос заключается в следующем: Как сделать новую категорию в выпадающем меню при том когда была создана новая папка или под-папка?

Часть кода я уже пытался написать, но у меня не совсем получается, в связи с незнанием 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
/**
* Поиск файла по имени во всех папках и подпапках
* 
* @param string $folderName - пусть до папки
* @param string $fileName - искомый файл
*/
function search_file($folderName, $fileName){
    // открываем текущую папку 
    $dir = opendir($folderName); 
    // перебираем папку 
    while (($file = readdir($dir)) !== false){ // перебираем пока есть файлы
        if($file != "." && $file != ".."){ // если это не папка
            if(is_file($folderName."/".$file)){ // если файл проверяем имя
                // если имя файла нужное, то вернем путь до него
                if($file == $fileName) return $folderName."/".$file;
            } 
            // если папка, то рекурсивно вызываем search_file
            if(is_dir($folderName."/".$file)) return search_file($folderName."/".$file, $fileName);
        } 
    }
    // закрываем папку
    closedir($dir);
}   
 
// пример использования
$folderName = $_POST['testfolder']; // в какой папке ищем
$fileName = $_POST['testname']; // что ищем
$result = search_file($folderName, $fileName);
if($result){
    echo $result;
}else{
    echo "Нет такого файла";
}
 
?>
 
<?php
 
 
if(!$module){
$module .= <<<HTML
    <form action = "index.php" method = "POST">
        Папка: <select name="tostate" id="States2">
                      <option value="Alabama" selected="selected"> Папка 1 </option>
                      <option value="Alaska"> Папка 2 </option>
                      <option value="Arizona"> Папка 3 </option>
        </select>
        Название теста: <input type = "text" name = "testname" value = "" SIZE = "15"  MAXLENGTH = "15" />
 
        <input class="wrapper-service-button" type = "Submit" value = "submit" />
    </form>
HTML;
echo $module;
}
 
?>
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2014, 20:17
Ответы с готовыми решениями:

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

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

Поиск по папкам и внесение правок в файл
Всем день добрый. Подскажите пожалуйста, есть задача: Есть дерево папок в которых есть подпапки и в них файлы.txt Нужно припомощи...

7
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
10.09.2014, 20:58

Не по теме:

Поиск файла по попкам
+1 за название темы



Добавлено через 12 минут
А по сути вопроса:
1) что должна вернуть функция search_file, если в нескольких директориях будет файл с одинаковым именем?
2) если функция работает как сейчас, то:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$module .= <<<HTML
<form action = "index.php" method = "POST">
        Папка: <select name="tostate" id="States2">
                      <option value="Alabama" selected="selected"> Папка 1 </option>
                      <option value="Alaska"> Папка 2 </option>
                      <option value="Arizona"> Папка 3 </option>
HTML;
if (isset($result)) $module .= '<option value="some_value">' . $result . '</option>';
$module .= <<<HTML
</select>
        Название теста: <input type = "text" name = "testname" value = "" SIZE = "15"  MAXLENGTH = "15" />
 
        <input class="wrapper-service-button" type = "Submit" value = "submit" />
    </form>
HTML;
Добавлено через 3 минуты
PS. такая функция поиска работать не будет
0
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 124
10.09.2014, 21:37  [ТС]
Данный скрипт будет служить для поиска тестов, то есть:

---Папка: 1ый Класс
------Папка: Матекатика
------Папка: Русский яз
------Папка: ОБЖ
-------------Файл:ОБЖ-Тест.txt

---Папка:2ой Класс
-------Папка: Что-то там
-------Папка: И так далее

Мне необходимо, что бы при создание новой папки - эта папка показывалась автоматически в списке выпадающего меню.

Скриншот:
Кликните здесь для просмотра всего текста




И там где пишет у меня "Папка" - там должны показываться папки: "1ый Класс", "2й Класс" и т.д.
Должно быть еще одно поле с подпапками, это будут предметы, они тоже должны быть в виде выпадающего меню, и после уже поле, в котором будет происходить поиск тестов!

Вот мой левый код
Кликните здесь для просмотра всего текста

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
50
51
52
53
<?php
/**
* Поиск файла по имени во всех папках и подпапках
* 
* @param string $folderName - пусть до папки
* @param string $fileName - искомый файл
*/
function search_file($folderName, $fileName){
    // открываем текущую папку 
    $dir = opendir($folderName); 
    // перебираем папку 
    while (($file = readdir($dir)) !== false){ // перебираем пока есть файлы
        if($file != "." && $file != ".."){ // если это не папка
            if(is_file($folderName."/".$file)){ // если файл проверяем имя
                // если имя файла нужное, то вернем путь до него
                if($file == $fileName) return $folderName."/".$file;
            } 
            // если папка, то рекурсивно вызываем search_file
            if(is_dir($folderName."/".$file)) return search_file($folderName."/".$file, $fileName);
        } 
    }
    // закрываем папку
    closedir($dir);
}   
 
// пример использования
$folderName = $_POST['testfolder']; // в какой папке ищем
$fileName = $_POST['testname']; // что ищем
$result = search_file($folderName, $fileName);
if($result){
    echo $result;
}else{
    echo "Нет такого файла";
}
 
?>
 
<?php
 
 
if(!$module){
$module .= <<<HTML
    <form action = "index.php" method = "POST">
        Название теста: <input type = "text" name = "testname" value = "" SIZE = "15"  MAXLENGTH = "15" />
        Папка: <input type = "text" name = "testfolder" value = "" SIZE = "15"  MAXLENGTH = "15" />
 
        <input class="wrapper-service-button" type = "Submit" value = "submit" />
    </form>
HTML;
echo $module;
}
 
?>
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
10.09.2014, 22:23
Цитата Сообщение от synapse Посмотреть сообщение
Мне необходимо, что бы при создание новой папки - эта папка показывалась автоматически в списке выпадающего меню.
делать "в лоб"
PHP
1
2
3
4
5
6
7
8
9
10
11
function getDirectoriesNames($dirName) {
    $result = array();
    $dir = opendir($folderName);
    while ( $file = readdir($dir) ) {
        if (is_dir("$folderName/$file") && $file != '.' && file != '..') {
            result[] = $file;
        }
    }
    closedir($dir);
    return $result;
}
вот функция, которая возвращает массив поддиректорий. (работоспособность не проверял, поэтому возможно придется вносить изменения)
PHP
1
2
3
4
5
6
7
 // получить все классы
$classes = getDirectoriesNames('/directory/to/tests');
// .......
вывести классы
foreach ($classes as $class) {
    echo '<option value="'.$class.'">'.$class.'</option>';
}
и вывод предметов аналогично.
0
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 124
12.09.2014, 19:56  [ТС]
Можно поподробнее...
Чет я не очень разбираюсь в данном куске кода... Есть возможность как то по подробнее описать, что необходимо сделать?

Будьте любезны помогите пожалуйста....
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
13.09.2014, 03:33
Цитата Сообщение от synapse Посмотреть сообщение
Чет я не очень разбираюсь в данном куске кода
Что конкретно непонятно?
Цитата Сообщение от synapse Посмотреть сообщение
Есть возможность как то по подробнее описать, что необходимо сделать?
Думаю тебе лучше известно что нужно сделать.
Как я понял у тебя должна быть форма, в ней 2 селекта: в 1 список всех папок, во 2 все подпапки выбранной папки; и input с именем файла.
список всех папок можно получить из php кода, просто в цикле вывести все option. Подпапки можно получать через ajax, или в js скрипт передавать массив со всеми папками и их подпапками и отображать только нужные.
Цитата Сообщение от synapse Посмотреть сообщение
Как сделать новую категорию в выпадающем меню при том когда была создана новая папка или под-папка?
Без перезагрузки страницы? Если да, то можно аяксом подгружать
1
1 / 1 / 0
Регистрация: 29.10.2010
Сообщений: 124
13.09.2014, 16:28  [ТС]
Да именно это мне и нужно...

1. - Выбор папки, 2. - Выбор подпапки, 3 - строка поиска,

После того как выбрал все необходимые папки и подпапки, я допустим введу слово test1.pdf - и на странице мне предложит скачать данный файл...

Именно это мне и нужно. Теоретически я представляю как это работает, но практически у меня ничего не получает не хватает знаний в 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
<?php
 
if ($handle = opendir('/opt/lampp/htdocs/dir')) {
    //echo "Дескриптор каталога: $handle\n";
    //echo "Записи:\n";
 
    /* Именно этот способ чтения элементов каталога является правильным. */
    while (false !== ($entry = readdir($handle))) {
        $is_folder = is_dir($entry);
        if($is_folder && ($entry != '.' && $entry != '..'))
        echo "<br /> $entry\n";
        //echo "<select><option value=\"Arizona\"> $entry\n </option></select>";//
        //echo "<br /> $is_folder\n";
    }
 
    /* Это НЕВЕРНЫЙ способ обхода каталога. */
    while ($entry = readdir($handle)) {
  //      echo "<br /> $entry\n";
    }
 
    closedir($handle);
}
?>
Поисковик (якобы)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
/**
* Поиск файла по имени во всех папках и подпапках
* 
* @param string $folderName - пусть до папки
* @param string $fileName - искомый файл
*/
function search_file($folderName, $fileName){
    // открываем текущую папку 
    $dir = opendir($folderName); 
    // перебираем папку 
    while (($file = readdir($dir)) !== false){ // перебираем пока есть файлы
        if($file != "." && $file != ".."){ // если это не папка
            if(is_file($folderName."/".$file)){ // если файл проверяем имя
                // если имя файла нужное, то вернем путь до него
                if($file == $fileName) return $folderName."/".$file;
            } 
            // если папка, то рекурсивно вызываем search_file
            if(is_dir($folderName."/".$file)) return search_file($folderName."/".$file, $fileName);
        } 
    }
    // закрываем папку
    closedir($dir);
}   
 
// пример использования
$folderName = $_POST['testfolder']; // в какой папке ищем
$fileName = $_POST['testname']; // что ищем
$result = search_file($folderName, $fileName);
if($result){
    echo $result;
}else{
    echo "Нет такого файла";
}
 
?>
 
 
 
<?php
$dir = opendir($path);
while ($dir && ($file = readdir($dir)) !== false) {
  // do stuff
}
?>
 
<?php
 
 
if(!$module){
$module .= <<<HTML
    <form action = "index.php" method = "POST">
        Название теста: <input type = "text" name = "testname" value = "" SIZE = "15"  MAXLENGTH = "15" />
        <select name="fromstate" id="States">
                      <option value="Alabama" selected="selected">Alabama</option>
                      <option value="Alaska">Alaska</option>
                      <option value="Arizona">Arizona</option>
                      <option value="Arizona">  <php  echo $entry; ?> </option>
        </select>
        Папка: <input type = "text" name = "testfolder" value = "" SIZE = "15"  MAXLENGTH = "15" />
 
        <input class="wrapper-service-button" type = "Submit" value = "submit" />
    </form>
HTML;
echo $module;
}
 
?>


Ребята помогите пожалуйста, дописать этот скрипт, голова вообще не варит...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
13.09.2014, 18:27
Лучший ответ Сообщение было отмечено synapse как решение

Решение

synapse, поиск было лень делать, вместо него сделал вывод полного имени файла. И в целом этот скрипт чтобы использовать в реальном проекте нужно доработать, но думаю разберешься
Кликните здесь для просмотра всего текста
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
define('ROOT', $_SERVER['DOCUMENT_ROOT']);
 
$dir    = exists($_POST['dir']); 
$subdir = exists($_POST['subdir']);
$file   = exists($_POST['file']);
 
$fullDir    = $dir               ? ROOT        . DIRECTORY_SEPARATOR . $dir    : null;
$fullSubdir = $subdir && $dir    ? $fullDir    . DIRECTORY_SEPARATOR . $subdir : null;
$fullFile   = $file   && $subdir ? $fullSubdir . DIRECTORY_SEPARATOR . $file   : null;
 
if ($dir && $subdir && $file) {
 
    echo 'Your file: ' . $fullFile;
 
} elseif ($dir && $subdir) {
 
    //echo $fullSubdir;
 
} elseif ($dir) {
 
    printOptions(getDirectories($fullDir));
 
} else {
?>
<form method="post">
    <?php printSelect('dir'   , 'dir-select'   , 'Folder: '    , getDirectories(ROOT)); ?>
    <?php printSelect('subdir', 'subdir-select', 'Sub Folder: '                      ); ?>
    <label>
        <span>File: </span>
        <input type="text" name="file" id="file-input">
    </label>
    <input type="submit" id="file-input" value="Find">
</form>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
    $('#dir-select').change(function() {
        var dir = $(this).find(':selected').val();
        if (dir == '') {
            $('#subdir-select').html('<option></option>');
        } else {
            $.post(
                '',
                {
                    dir : dir
                },
                function(data) {
                    $('#subdir-select').html(data);
                }
            );
        }
    });
 
    $('form:first').submit(function(event) {
        var dir    = $('#dir-select')   .val();
        var subdir = $('#subdir-select').val();
        var file   = $('#file-input')   .val();
        if ( dir != '' && subdir != '' && file != '' ) {
            $.post(
                '',
                {
                    dir    : dir,
                    subdir : subdir,
                    file   : file
                },
                function(data) {
                    alert(data);
                }
            );
        } else {
            alert('Fill all fields');
            console.log(dir, subdir, file);
        }
        event.preventDefault();
    });
</script>
<?php
}
 
function getDirectories($dirName) {
    $dir = opendir($dirName);
    $result = array();
    while ($file = readdir($dir)) {
        if (is_dir("$dirName/$file") && $file != '.' && $file != '..') {
            $result[] = $file;
        }
    }
    closedir($dir);
    return $result;
}
 
function printSelect($name, $id, $title, array $values = array()) {
    echo '<label><span>' . $title . '</span>' . '<select name="' . $name . '" id="' . $id .'">';
    printOptions($values);
    echo '</select></label>';
}
 
function printOptions(array $values = array()) {
    echo '<option></option>';
    foreach ($values as $value) {
        echo '<option value="' . $value . '">' . $value . '</option>';
    }
}
 
function exists($var) {
    return isset($var) && !empty($var) ? $var : null;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.09.2014, 18:27
Помогаю со студенческими работами здесь

Поиск и копирование файлов по дате последнего изменения с раскладкой по папкам
Возникла такая казалось бы простая задача (по крайней мере в Windows, команда xcopy решает её просто): надо найти все файлы в папке dir1...

Копирования файла по сетевым папкам
Здравствуйте, как можно скопировать файл, например, екселя?

Распределение файлов по заданным папкам в зависимости от расширения файла
Здравствуйте, уважаемые пользователи, появилась проблема с написанием bat файла. Необходимо следующее: произвести сортировку всех файлов...

Заполнение xml файла из списка путей к файлам и папкам
Суть проблемы: имеется список с полными путями к файлам и папкам, типа: D:\Test D:\Test\New text document.txt D:\Test\FOLDER1 ...

Распределение файлов по папкам созданных как часть имени файла
Добрый день. Прошу подсказать в решении такой задачки. Есть 1 500 000 файлов с именами типа...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru