Cerca su file in una cartella

Ho una casella di ricerca sul mio sito. Se uno studente inserisce del text, lo script deve cercare i file con quel tipo di nome in una cartella.

Come leggere la cartella e cercare i file?

A seconda del tuo sistema operativo e dell'ampiezza dei file nella cartella, puoi procedere in vari modi. Il modo più semplice sarebbe usare glob ():

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

Questo dovrebbe darti gli stessi risultati di "ls * something *" in quella directory.

Se si ha in mente un model di ricerca più specifico e una grandezza modesta dei file nella directory, scandir () ti darà una matrix su cui potresti usare preg_match ().

Se si dispone di un vasto numero di file, si potrebbe prendere in considerazione l'utilizzo di / usr / bin / locate o / usr / bin / find. Questi tipi di esecuzioni di shell da php comportno un carico di sistema. Se hai un gran numero di studenti o una ricerca pubblica, vorresti perseguire un approccio diverso.

Leggi la voce glob () sul manuale PHP.

È ansible utilizzare la function scandir , che può restituire una list ordinata che è ansible cercare nello stesso modo in cui si cerca una matrix. Potresti anche utilizzare un'implementazione dell'algorithm di distanza Levenshtein per fornire un "Intendi?" risposta di stile dalla tua applicazione.

MySql? non sei mai collegato a MySql o a db. inoltre la posizione di glob ("c: / windows / $ safer ") non esiste su un server.

se vuoi cercare con glob, devi usare un paio ifs, elseifs ed 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 } ?>