Поиск по файлам в папке - PullRequest
       1

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

2 голосов
/ 31 октября 2009

У меня есть окно поиска на моем сайте. Если учащийся вводит какой-либо текст, сценарий должен выполнить поиск файлов с таким именем в папке.

Как читать папки и искать файлы?

Ответы [ 4 ]

6 голосов
/ 31 октября 2009

В зависимости от вашей ОС и количества файлов в папке, вы можете сделать это несколькими различными способами. Самый простой способ - использовать glob ():

$safer = escapeshellarg( $_REQUEST['search'] );
$results = glob( "$dir/*$safer*" );

Это должно дать вам те же результаты, что и "ls * что-то *" в этом каталоге.

Если вы имеете в виду более конкретный шаблон поиска и скромное количество файлов в каталоге, scandir () предоставит вам массив, для которого вы можете использовать preg_match ().

Если у вас огромное количество файлов, вы можете использовать / usr / bin / locate или / usr / bin / find. Эти виды выполнения оболочки из php вызывают нагрузку на систему. Если у вас большое количество студентов или открытые поиски, вы можете использовать другой подход.

2 голосов
/ 31 октября 2009

Прочитайте запись glob () в руководстве по PHP.

0 голосов
/ 23 сентября 2010

MySql? Вы никогда не подключались к MySql или БД. плюс расположение глобуса ("c: / windows / $ safer ") не существует на сервере.

если вы хотите искать с помощью glob, вам нужно использовать пару ifs, elseifs и elses.

<?php
if(isset($_GET['s']) and $_GET['s'] != '') {
    $dir = 'dir/sub-dir';
    $ext = '.htm';
    $search = $_GET['s'];
    $results = glob("$dir/*$search*$ext");
    if(count($results) != 1) {
        foreach($results as $item) {
            echo "<li><a href='$item'>$item</a></li>\r\n";    
        }
    }
    if(count($results) == 1) {
        $item = $results[0];
        echo "<li color='blue'><a href='$item'>$item - only result</a></li>\r\n";
    }
    if(count($results) == 0) {
       echo "<li>no results to display</li>\r\n";   
    }
}
else {
    ?>
    <form action=''>
    <input name='s'>
    <input type='submit'>
    </form>
    <?php
}
?>
0 голосов
/ 31 октября 2009

Вы можете использовать функцию scandir , она может возвращать отсортированный список, который затем можно искать так же, как и в массиве. Тогда вы также сможете использовать реализацию алгоритма расстояния Левенштейна , чтобы получить «Вы имели в виду?» стиль ответа от вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...