2009-10-31 126 views
2

我的網站上有一個搜索框。如果學生輸入一些文本,腳本必須在文件夾中搜索具有該類型名稱的文件。搜索文件夾中的文件

如何閱讀文件夾和搜索文件?

回答

6

根據您的操作系統和文件夾中文件的大小,您可以通過幾種不同的方式進行操作。最簡單的方法是使用水珠():

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

這應該給你同樣的結果在該目錄中的「ls * *的東西」。

如果你有一個更具體的搜索模式和目錄中的文件數量適中,scandir()會給你一個數組,你可以使用preg_match()。

如果您擁有大量文件,那麼可以考慮利用/ usr/bin/locate或/ usr/bin/find。這些類型的php執行會導致系統負載。如果你有大量的學生或面向公衆的搜索,那麼你會想要採取不同的方法。

0

您可以使用scandir函數,它可以返回一個排序列表,然後您可以使用搜索數組的相同方式進行搜索。然後,您還可以使用Levenshtein Distance Algorithm的實現來提供「您的意思是?」從你的應用程序風格響應。

0

MySql?你從來沒有連接到MySql或數據庫。加上glob的位置(「c:/ windows/$更安全」)在服務器上不存在。

如果你想用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 
} 
?>