У меня есть окно поиска на моем сайте. Если студент вводит какой-либо текст, скрипт должен искать файлы с таким типом имени в папке.
Как читать папку и искать файлы?
В зависимости от вашей ОС и объема файлов в папке вы можете использовать несколько способов. Самый простой способ – использовать glob ():
$safer = escapeshellarg( $_REQUEST['search'] ); $results = glob( "$dir/*$safer*" );
Это должно дать вам те же результаты, что и «ls * something *» в этом каталоге.
Если у вас есть более конкретный шаблон поиска и небольшая величина файлов в каталоге, scandir () предоставит вам массив, в котором вы можете использовать preg_match ().
Если у вас огромное количество файлов, вы можете рассмотреть возможность использования / usr / bin / locate или / usr / bin / find. Эти виды выполнения оболочки из php несут нагрузку на систему. Если у вас есть большое количество учеников или поиск с общественностью, то вы захотите использовать другой подход.
Прочтите запись glob () в Руководстве по PHP.
Вы можете использовать функцию scandir , она может вернуть отсортированный список, который вы можете искать таким же образом, как и поиск массива. Затем вы также сможете использовать реализацию алгоритма расстояний Левенштейна, чтобы обеспечить «Вы имели в виду?». от вашего приложения.
MySql? вы никогда не подключались к MySql или db. плюс расположение glob («c: / windows / $ safe ») не существует на сервере.
если вы хотите искать с помощью 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 } ?>