Ir para conteúdo
Fórum Script Brasil
  • 0

Script De Busca "plug And Play"


Beraldo

Pergunta

Script postado por: Illidan

Script de Busca "Plug and Play"

É só salvar na raiz do site que ele já reconhece automaticamente todas as pastas e subpastas. Não precisa mexer na configuração nem utilizar um banco de dados, é muito prático! :D

<?php

/**************************************************\
#   siteBuusca! v1.0                               #
#                                                  #
#     Autor:  Carlos Reche                         #
#     E-mail: carlosreche@yahoo.com                #
#                                                  #
#     Por favor, mantenha os créditos =)           #
#                                                  #
#   Sistema de busca em páginas da web. Não é      #
#   necessário um banco de dados para trabalhar    #
#   com este script. Apenas digite o caminha da    #
#   raiz onde a busca deverá ocorrer, e ele irá    #
#   buscar em todas as subpastas automaticamente.  #
#                                                  #
\**************************************************/


////////////////////////     INÍCIO DA CONFIGURAÇÃO     ////////////////////////


/*      LEIA ANTES DE MEXER NA CONFIGURAÇÃO!!!

  -> Sempre que você for informar um diretório, informe o caminho relativo sem barras no início
     ou no final. Por exemplo, imagine que seu script de busca esteja em:
     "http://www.seunome.com.br/scripts/busca/busca.php", e você queira que o script interprete
     como sendo a raiz da busca a mesma pasta que é a raiz do site (ou seja, a pasta que conteria
     o diretório "scripts"). Então, neste caso você deveria configurar da seguinte forma:
          $secao_dir[0] = "../.."
     Nota: esta regra de configuração vale para este script. Ela pode não se aplicar em outros casos.
*/

//  DIGITE O NOME E O CAMINHO DE CADA SEÇÃO EXISTENTE:   (buscará por todos os subdiretórios automaticamente)
//  Você pode incluir mais de um valor, desde que mantenha a seqüência somando 1 (um) no índice.
//  Obs: para que a pasta da busca seja a mesma de onde se encontra este script, coloque apenas um ponto "."

$secao_nome[0] = "Todo o site";
$secao_dir[0] = ".";

$secao_nome[1] = "";
$secao_dir[1] = "";

$secao_nome[2] = "";
$secao_dir[2] = "";


//  DIGITE O LIMITE DE EXIBIÇÃO POR PÁGINAS
      $limite = 10;


//  TAMANHO MÍNIMO DA PALAVRA PARA QUE A BUSCA SEJA EXECUTADA (EM CARACTERES)
      $tamanho_min = 3;


//  DIGITE OS DIRETÓRIOS QUE DESEJA EXCLUIR DA BUSCA
//  Para adicionar novas exlusões de diretórios, copie e cole o modelo da última linha (que começa com "$exc++; ...").
//  Obs: Lembre-se de NÃO colocar uma barra no início ou no final do caminho, caso contrário não excluirá o diretório

      $exc=0; $excluir_dir[$exc] = "";
      $exc++; $excluir_dir[$exc] = "";
      $exc++; $excluir_dir[$exc] = "";


///////////////   FIM DA CONFIGURAÇÃO - NÃO ALTERE OS VALORES ABAIXO SEM SABER   ///////////////


$diretorio[0] = @$secao_dir[@$_GET['secao']];


function getmicrotime() {
   list($usec, $sec) = explode(" ", microtime());
   return ((float)$usec + (float)$sec);
}

function unhtmlentities($string) {
   $trans_tbl = get_html_translation_table(HTML_ENTITIES);
   $trans_tbl = array_flip ($trans_tbl);
   return strtr ($string, $trans_tbl);
}

function limpa_tag_scripts($string) {
    $exclui = array ("'(<\?).*?(\?>)'si",     // Limpar tags PHP
                     "'(<%).*?(%>)'si");      // Limpar tags ASP
    $substitui = array ("", "");
    $string = preg_replace($exclui, $substitui, $string);
    return ($string);
}

function limpa($string) {
    $string = eregi_replace("%0D%0A", "+", urlencode($string));  // limpar "tecla enter"
    $string = eregi_replace("    ", " ", urldecode($string));     // limpar tabulações

    $exclui = array ("'<[\/\!]*?[^<>]*?>'si",     // Limpar tags HTML
                     "'([\r\n])[\s]+'",           // Limpar espaços em branco
                     "/ +/");                     // Limpar espaços consecutivos
    $substitui = array ("", "\\1", " ");
    $string = preg_replace($exclui, $substitui, $string);
    return (trim($string));
}


/////////////////////////////////  FIM DAS FUNÇÕES   /////////////////////////////////


$creditos = "<div style=\"margin-top: 30px; width: 720px; text-align: center;\">
<hr width=\"720\" align=\"center\" size=\"2\" color=\"#aaaaaa\" noshade=\"true\" />
<font style=\"font-family: verdana; font-size: 11px; color: #cc3333;\"><strong>
Desenvolvido por Carlos Reche </strong> <br />
<a href=\"mailto:carlosreche@yahoo.com\" title=\"carlosreche@yahoo.com\"><em>carlosreche@yahoo.com</em></a>
</font>\n</div>";


$busca = trim(stripslashes(@$_GET['busca']));
$busca = eregi_replace("\"", "", $busca);
$busca_quebra = explode(" ", $busca);

$achou_inicial = @$_GET['achou_inicial'];
if (!@$_GET['achou_inicial']) { $achou_inicial = "1"; }
if (!@$_GET['exibe_status']) { $_GET['exibe_status'] = "0"; }
if (!@$_GET['secao']) { $_GET['secao'] = "0"; }

?>
<html>
<head>
<title>siteBuusca! <?php
if ($busca) { echo " - Resultado da busca"; }
?></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">

body {margin: 20px;}

body,table {color: #333333; font-family: arial; font-size: 15px;}

a:link {color: #0000cc; text-decoration: none;}
a:hover {color: #0066cc; text-decoration: none;}
a:active {color: #cc7700; text-decoration: none;}
a:visited {text-decoration: none;}

.resultado {margin-top: -5px; margin-bottom: 30px; width: 700px;}
.linha {margin-top: -5px; height: 1px; width: 720px; text-align: left; color: #cccccc;}

</style>
</head>

<body vlink="#0000cc" <?php 
if (!$busca) { echo "onload=\"document.formulario.busca.focus();\""; }
?>>

<form name="formulario" method="get" action="<?php
echo $_SERVER['PHP_SELF'] . "?busca=" . @$_GET['busca'];
?>">

<div style="width: 720px; margin-bottom: 10px; text-align: center;">
<font style="font-size: 20px;"><strong>site<em>Buusca</em>!</strong></font> <br /><br /><br />

Buscar por <input type="text" name="busca" size="30" <?php
if (@$busca) { echo "value=\"" . $busca . "\" "; }
?>/>
<select name="secao">
<?php

for ($sec=0; !empty($secao_nome[$sec]) && !empty($secao_dir[$sec]); $sec++) {
    echo "<option value=\"" . $sec . "\" ";
        if ($_GET['secao'] == $sec) { echo "selected"; }
    echo ">" . $secao_nome[$sec] . "</option>";
}
?>
</select>
<input type="submit" value="Buscar" />

<div style="margin-top: 10px; margin-left: 50px;">
<input type="checkbox" value="1" name="exibe_status" <?php
if ($_GET['exibe_status'] == "1") { echo "checked"; }
?>/>
<font style="font-size: 12px;">Exibir detalhes da busca (processo mais demorado)</font>
</div>
</div>
</form>


<?php

if ($busca) {
    foreach ($busca_quebra as $teste_uma) { if (strlen($teste_uma) >= $tamanho_min) { $ok = 1; } }
    if (@$ok != 1) {
        echo "<div style=\"margin-left: 30px;\"><strong>Atenção!</strong><br />";
        echo "A(s) palavra(s) pesquisada(s) não atinge(m) o tamanho mínimo permitido!</div>";
        echo $creditos . "</body>\n</html>\n";
        exit;  // sai do script caso nenhuma palavra atinja o tamanho mínimo permitido
    }


ini_set("memory_limit", 100000000);

// varre todos os subdiretórios
$x = count($diretorio)-1;
for ($y = "0"; isset($diretorio[$y]); $y++) {
    if ($dh = @opendir($diretorio[$y])) {
        while (($file = readdir($dh)) !== false) {
           if (is_dir("$diretorio[$y]/$file") && ($file != ".") && ($file != "..")) {
                $x++;
                $diretorio[$x] = $diretorio[$y] . "/" . $file;
            }
        }
        closedir($dh);
    }
}
clearstatcache();

$tempo_i = getmicrotime();


echo "<hr size=\"2\" width=\"720\" align=\"left\" color=\"#aaaaaa\" noshade=\"true\" style=\"margin-bottom: 10px;\">";
echo "<br /><br /><br /><br /><br /><br />";
if ($_GET['exibe_status'] == "1") { echo "<br />\n\n"; }


$procurou = "0";
$achou = "0";
$achados[0] = NULL;

for ($i = 0; isset($diretorio[$i]); $i++) {  // varre cada diretório encontrado

if (($dh = @opendir($diretorio[$i])) && (!in_array($diretorio[$i], $excluir_dir))) {
    while (($arquivo = readdir($dh)) !== false) {
        $arq_quebra = explode(".", $arquivo);
        $ext = strtolower(end($arq_quebra));

        // sai do laço "while" caso tenha passado do limite de exibição, otimizando o tempo no modo de busca sem detalhes
        if (($_GET['exibe_status'] != "1") && ($achou > $achou_inicial + $limite)) { break; } 

        if (($arquivo != '.') && ($arquivo != '..') && ($ext != $arq_quebra[0]) && ($ext != false)) {

            if (($ext == "htm") || ($ext == "html") || ($ext == "php") || ($ext == "php3") ||
                ($ext == "asp") || ($ext == "pdf") || ($ext == "txt")) {
                $procurou++;  //  determina o número de arquivos pesquisados

                $abre = file_get_contents("$diretorio[$i]/$arquivo");

                $cam_quebra = explode("/", $_SERVER['PHP_SELF']); array_pop($cam_quebra); array_pop($cam_quebra);
                $cam_junta = implode("/", $cam_quebra);
                $caminho = "http://" . $_SERVER['HTTP_HOST'];
                $caminho .= $cam_junta;
                $caminho .= "/" . $diretorio[$i];
                $caminho .= "/" . $arquivo;
                if (!ereg("\.\./", $caminho)) { $caminho = ereg_replace("\./", "", $caminho); }

                $abre = limpa_tag_scripts($abre);
                if (eregi("<title>", $abre)) {
                    $titulo = preg_replace("'.*<title>|</title>.*'si", "", $abre);
                } else {
                    $titulo = $caminho;
                }
                if (empty($titulo)) { $titulo = "(Página sem título)"; }
                $abre = strip_tags($abre);
                $abre = unhtmlentities($abre);
                $busca_quebra = explode(" ", $busca);

foreach ($busca_quebra as $busca_uma) {

                if (strlen($busca_uma) < $tamanho_min) { continue; }
                if ((eregi($busca_uma, $abre) || eregi($busca_uma, $arquivo)) && !in_array("$diretorio[$i]/$arquivo", $achados)) {
                    // determina o número de ocorrências e cria um array para não repetir resultados
                    $achou++;
                    $achados[$achou-1] = "$diretorio[$i]/$arquivo";

                    // sai do laço se estiver fora do intervalo de exibição pra economizar tempo
                    if (($achou < $achou_inicial) || ($achou > $achou_inicial + $limite)) { continue; }

// determina até onde irá a exibição dos resultados
if (($achou >= $achou_inicial) && ($achou < $achou_inicial + $limite)) {

                    $texto = limpa($abre);
                    $tamanho = strlen($texto);
                    $pos = strpos(strtolower($texto), strtolower($busca_uma));
                    if ($pos > 100) { $texto = substr($texto, $pos-100, 300); }
                    else if ($pos <= 100 && $pos > 50) { $texto = substr($texto, $pos-50, 300); }
                    else { $texto = substr($texto, 0, 300); }

/*  Alternativa:        $texto = preg_replace("/(^.{0,300})(\W+.*$)/", "\${1}", $texto);   */

                    $texto_quebra = explode(" ", $texto);
                    if ($pos > "0") { array_shift($texto_quebra); }
                    if ($tamanho > "300") { array_pop($texto_quebra); }
                    $texto = implode(" ", $texto_quebra);

                    if ($pos > "0") { $texto = "... " . $texto;}
                    if ($tamanho > 300) { $texto = $texto . " ..."; }

                    echo "<strong>" . $achou . ". <a href=\"" . $diretorio[$i] . "/" . $arquivo . "\">";
                    echo $titulo . "</a></strong><hr class=\"linha\">\n";
                    echo "<div class=\"resultado\">\n";

                    foreach ($busca_quebra as $destaca) {
                        if (strlen($destaca) < $tamanho_min) { continue; }
                        $texto = preg_replace("/($destaca)/si", "<b>\\1</b>", $texto);
                    }
                    echo $texto;
                    if (empty($texto)) { echo "(Página sem descrição)"; }

                    echo "<div style=\"margin-top: 3px;\"><a href=\"" . $diretorio[$i] . "/" . $arquivo . "\">";
                    echo $caminho . "</a></div>\n\n</div>\n\n";

} // if $achou > $limite
                }  // if eregi()
flush();
clearstatcache();
} // foreach
            }  // if ($ext)
        }
        flush();
        clearstatcache();
    }  //  while
    flush();
    clearstatcache();
    closedir($dh);
}
flush();
unset($diretorio[$i]);
clearstatcache();
}  // fecha laço "for"


$tempo_f = getmicrotime();
$tempo_total = number_format($tempo_f-$tempo_i, 2, ",", ".");


$anterior = $achou_inicial - $limite;
$proximo = $achou_inicial + $limite;

$url_anterior = $_SERVER['PHP_SELF'] . "?busca=" . urlencode(@$_GET['busca']) . "&achou_inicial=" . $anterior;
$url_anterior .= "&secao=" . @$_GET['secao'] . "&exibe_status=" . $_GET['exibe_status'];

$url_proximo = $_SERVER['PHP_SELF'] . "?busca=" . urlencode(@$_GET['busca']) . "&achou_inicial=" . $proximo;
$url_proximo .= "&secao=" . @$_GET['secao'] . "&exibe_status=" . $_GET['exibe_status'];

if (@$achou > "0") {
    echo "\n<br />\n<div align=\"center\" style=\"width: 730px\">\n<span style=\"color: #999999;\">\n";
    if ($achou_inicial > 1) { echo "<a href=\"" . $url_anterior . "\">"; }
    echo "<strong><< Anterior</strong></a> | ";
    if ($achou > $proximo) { echo "<a href=\"" . $url_proximo . "\">"; }
    echo "<strong>Próximo >></strong></a>\n</span></div>\n\n";
}

echo $creditos;

// Início do layer
if ($_GET['exibe_status'] == "1") {
    echo "\n\n<div style=\"position: absolute; top: 180px; left: 20px;\">";
} else {
    echo "\n\n<div style=\"position: absolute; top: 160px; left: 20px;\">";
}
echo "<table border=\"0\" width=\"720\ cellpadding=\"0\" cellspacing=\"0\">
<tr><td valign=\"top\" width=\"430\"> ";

if ($_GET['exibe_status'] == "1") {
if (@$achou > "0") {
    if (@$achou == "1") { echo "Foi encontrada <strong>" . $achou . "</strong> ocorrência "; }
    else { echo "Foram encontradas <strong>" . $achou . "</strong> ocorrências "; }
    echo "para o(s) termo(s) \"<strong>" . $busca . "</strong>\"</div>";
}
} else { echo " "; }  // fecha if "exibe status"

if (@$achou == "0") {
    echo "<br />Não houve ocorrências para o(s) termo(s) \"<strong>" . $busca . "</strong>\"";
}

echo "</td><td align=\"right\" width=\"300\">";
if ($_GET['exibe_status'] == "1") {
    echo "<em>Total de " . $procurou . " arquivos pesquisados </em>";
}
echo "<br /><em>Tempo: " . $tempo_total . " segundos</em>";
echo "</td></tr>\n<tr><td colspan=\"2\" align=\"center\" style=\"padding-top: 10px;\">";

if (@$achou > "0") {
    echo "\n<br />\n\n<span style=\"color: #999999;\">\n";
    if ($achou_inicial > 1) { echo "<a href=\"" . $url_anterior . "\">"; }
    echo "<strong><< Anterior</strong></a> | ";
    if ($achou > $proximo) { echo "<a href=\"" . $url_proximo . "\">"; }
    echo "<strong>Próximo >></strong></a>\n</span>\n\n</td></tr>\n</table>\n</div>\n\n";
}


}  // fecha "if ($busca)"

clearstatcache();

if (!$busca) { echo $creditos; }

?>

</body>
</html>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
Guest wilsonoliveira.com

Cara, excelente....

Agora será que você poderia adaptar esse buscador para que ele busque uma frase completa como no google... por exemplo eu digitando entre aspas "a meia noite roubarei sua alma" e ele vai lá e busca???

se quiser me escreva em phvdev@yahoo.com.br

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,8k
×
×
  • Criar Novo...