Sistema De Busca
Started By pcclaro, 12/08/2007, 04:10
6 replies to this topic
#1
Posted 12/08/2007, 04:10
Pessoal preciso montar um sistema de busca q procure por textos dentro de arquivos php, uma bela pesquisada me fez pensar na lógica :
devo criar um loop que abra todos os arquivos dos diretórios, usar file_get_contents() para resgatar o conteúdo dos arquivos, a função strstr() ou preg_match(),para buscar o nome, acho que seja isso.mas não sei como fazer, só sei a lógica, alguém poderia me ajudar ?
devo criar um loop que abra todos os arquivos dos diretórios, usar file_get_contents() para resgatar o conteúdo dos arquivos, a função strstr() ou preg_match(),para buscar o nome, acho que seja isso.mas não sei como fazer, só sei a lógica, alguém poderia me ajudar ?
#2
Posted 12/08/2007, 04:52
Primeiro crie uma variavel aonde vai armazenar o conteudo do diretório.
Depois você vai verificar, se é arquivo ou pasta, e tb se contém a palavra da busca:
Abraços
$busca='';//aqui seria armazenado o valor da busca $listar = scandir('pasta');//armazenando o conteudo do diretorio unset($listar[0],$listar[1]);
Depois você vai verificar, se é arquivo ou pasta, e tb se contém a palavra da busca:
foreach($listar as $conteudo){ if(!is_dir($conteudo)){ $resultado = strstr(get_file_contets($conteudo), $busca)); if($resultado){ $resultados .= "<a href=\"$conteudo\">".strip_tags(substr($resultado, 0, -50))."</a><br>\n"; } } } if(isset($resultados)){ print "Resultados:<br><br>\n$resultados"; }else{ print "Não foi localizado nada com \"$busca\"."; }
Abraços
#3
Posted 12/08/2007, 16:00
B!ö$, valeu pela força ai cara,bom, pelo empurrão que vc me deu,tentei dar uma modificada pra tentar fazer funcionar, só que está dando esse erro :
Warning: Invalid argument supplied for foreach() in c:\arquivos de programas\easyphp1-8\www\minha busca\tmp246pemockd.php on line 14
Não foi localizado nada com "".
essa é a linha 14
o código ta assim
Warning: Invalid argument supplied for foreach() in c:\arquivos de programas\easyphp1-8\www\minha busca\tmp246pemockd.php on line 14
Não foi localizado nada com "".
essa é a linha 14
foreach($listar as $conteudo){
o código ta assim
<form action="" method="get"> <input type="text" name="achar"> <input type="submit"> </form> <? $dir="arquivos2"; $busca=@$_GET['achar']; //aqui seria armazenado o valor da busca $listar = opendir($dir); //armazenando o conteudo do diretorio while(false!==($file=readdir($listar))){ foreach($listar as $conteudo){ if(!is_dir($conteudo)){ $resultado = strstr(file_get_contents($conteudo/$busca)); if($resultado){ $resultados .= "<a href=\"$conteudo\">".strip_tags(substr($resultado, 0, -50))."</a><br>\n"; } } } if(isset($resultados)){ print "Resultados:<br><br>\n$resultados"; }else{ print "Não foi localizado nada com \"$busca\"."; } } ?>se eu uso o scandir, me da fatal error
#5
Posted 13/08/2007, 11:25
Bom savior, eu sempre leio o manual ,ao contrário do que vc acha, o problema é que como comecei a estudar php ha pouco tempo é dificil que eu saiba de todas as funções e principalmente, saiba usar todas as funçoes do php,e não concordo que um exemplo poderia estragar meu aprendizado, mesmo pq estudo todos os dias sobre php, e estou tentando aprender,e mesmo assim não consegui usar a função glob, mas de qualquer forma obrigado
Estou fazendo certo ??, não sei pq não funciona, me deêm uma força ai,por favor
Estou fazendo certo ??, não sei pq não funciona, me deêm uma força ai,por favor
<form action="" method="get"> <input type="text" name="achar"> <input type="submit"> </form> <? $dir="/arquivos2/"; $busca=@$_GET['achar']; $listar = glob($dir."/*"); foreach($listar as $conteudo){ if(!is_dir($conteudo)){ } $resultado = strstr(file_get_contents($conteudo/$busca)); if($resultado){ $resultados .= "<a href=\"$conteudo\">".strip_tags(substr($resultado, 0, -50))."</a><br>\n"; } } if(isset($resultados)){ print "Resultados:<br><br>\n$resultados"; }else{ print "Não foi localizado nada com \"$busca\"."; } ?>
Edição feita por: pcclaro, 13/08/2007, 11:24.
#6
Posted 13/08/2007, 12:22
forma condenável de má programação, utilize isset nesse trecho '$busca=@$_GET['achar'];
Um código que eu uso para buscar classes nas minhas aplicações, pode se basear nesse extempo para fazer sua busca:
<? function __autoload($classe) { $classe_path = findClass($classe); if (isset($classe_path)) require_once ($classe_path); } function findClass($classe_req) { $diretorio = __MODULO_PATH__; $path_classe = null; foreach (glob($diretorio."/*", GLOB_ONLYDIR) as $sub_dir) { if (is_array(glob($sub_dir."/*.class.php"))) { foreach (glob($sub_dir."/*.class.php") as $classe) { if (preg_match("/" . $classe_req . "/i", $classe)) $path_classe = $classe; } } } return $path_classe; } ?>
Eu uso um preg_match para encontrar o arquivo que eu quero, deu p/ entender?
Essa função é recursiva, ou seja vai procurando pelos diretórios que for encontrando;
Edição feita por: savior, 13/08/2007, 12:22.
#7
Posted 13/08/2007, 12:59
Valeu Savior
0 user(s) are reading this topic
0 membro(s), 0 visitante(s) e 0 membros anônimo(s)