Sto cercando di realizzare uno script che mi funga ma motore di ricerca all'interno di una data directory e rispettive sottocartelle.
A tal proposito ho implementare una funzione la quale mi faccia un cammino tra tutti i file e cartelle presenti in una data directory, il cui risultato (il nome dei file o cartelle) viene memorizzato all'interno di una array se questi coincide o contiene in parte la chiave di ricerca.
Codice PHP:
//ricerca file
$files = listdir($path, $key);
Codice PHP:
/* Una funzione ricorsiva la quale restituisce tutti i file e cartelle contenuti nella directory $star_dir, il cui nominativo contenga, anche in parte, la $key cercata.*/
function listdir($start_dir, $key) {
$files = array();
if (is_dir($start_dir)) {
$fh = opendir($start_dir);
while (($file = readdir($fh)) !== false) {
// cicla tra i file, saltando . e .., e fa uso di ricorsione se necessario
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
$filepath = $start_dir . '/' . $file;
if ( is_dir($filepath) ){
if([B]strpos($file,$key)[/B]){
array_push($files, $filepath);
}//if
$files = array_merge($files, listdir($filepath, $key));
}else{
if([B]strpos($file,$key)[/B]){
array_push($files, $filepath);
}//if
}//else
}//while
closedir($fh);
} else {
//restituisce false se invocata una directory non valida
$files = false;
}//else
return $files;
}//listdir
Il problema che nonstante abbia usato la funzione strpos($file,$key) per selezionare il nome del file che contenga, anche se in parte, la chiave $key, questi non seleziona tutti i file.
A titolo di esempio, si immaggini di voler trovare tutti i file il cui nome contenga la chiave 'search' e che i file da ricercare siano così distribuiti:
codice:
./
|-searchfile.php
|-serach_file.php
|-/images
|-search.png
|-top_search.png
quando eseguo l'istruzione
Codice PHP:
print_r($files);
, al fine di verificare il contenuto della ricerca questi conterrà solo il file:
Codice PHP:
Array ( [0] => .//images/top_search.png )
non inserendo i file searchfile.php , serach_file.php , search.png. Come è possibile?