Jump to content


Photo

Sistema De Busca


  • Faça o login para participar
6 replies to this topic

#1 pcclaro

pcclaro

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

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 ?

#2 B!ö$

B!ö$

    12 Horas

  • Usuários
  • 129 posts
  • Sexo:Masculino
  • Localidade:Randômico

Posted 12/08/2007, 04:52

Primeiro crie uma variavel aonde vai armazenar o conteudo do diretório.
$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 pcclaro

pcclaro

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

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

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

#4 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 12/08/2007, 16:29

Tentou utilizar glob? Se lesse o manual descobriria ele <_<'

Eu prefiro utilizar ele do que o scandir.

Não vou passar um exemplo pronto, porque tem vários no manual da função. Estragaria seu aprendizado se eu passasse um exemplo.

Edição feita por: savior, 12/08/2007, 16:30.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#5 pcclaro

pcclaro

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

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

<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 savior

savior

    Campanha [codebox], use ou morra :D

  • Usuários
  • 1229 posts
  • Sexo:Masculino
  • Localidade:Curitiba, PR - Brasil
  • Interesses:Na vida ;P

Posted 13/08/2007, 12:22

$busca=@$_GET['achar'];

forma condenável de má programação, utilize isset nesse trecho <_<'

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;

(y)

Edição feita por: savior, 13/08/2007, 12:22.

[lastfm] [blog]

Campanha codebox: use-a ou morra!
bfmaster_duran[at]yahoo.com.br


#7 pcclaro

pcclaro

    Turista

  • Usuários
  • 29 posts
  • Sexo:Não informado

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)

IPB Skin By Virteq