Actualizei o código adicionando uma função que retira a acentuação das
palavras para resultados mais fiáveis...
Inseri tambem a contagem do tempo de pesquisa.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Coded by =IceBurn= (WWW.TENHAMEDO.NET)</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<style type="text/css">
body { font-family: arial,sans-serif; color: black; background: white; }
.p { font-size:8pt; color:blue; }
a:link { color: blue; text-decoration: underline; }
a:active { color: green; text-decoration: underline; }
a:visited { color: #551a8; text-decoration: underline; }
</style>
</head>
<table width="90%" align="center">
<tr>
<td>
<!-- Coded by =IceBurn= 2006
W W W . T E N H A M E D O . N E T -->
<?php
//**********************************************************//
// # Sistema Simples de Pesquisa em PHP v1.1 # //
// !! Por favor deixe os créditos !! //
// Coded by =IceBurn= //
// WWW.TENHAMEDO.NET //
//**********************************************************//
/*
------------------------- !! IMPORTANTE !! ----------------------------
Para o correcto funcionamento do script,
todas as páginas a pesquisar necessitam de
pelo menos duas meta tags, description e keywords.
Exemplo:
<meta name="keywords" content="php, iceburn">
<meta name="description" content="Sistema Simples de Pesquisa em PHP">
As tags <title>Exemplo.com</title> tambem são requeridas.
------------------------------------------------------------------------
*/
/*
Função Que Retira a acentuação das Palavras
*/
function RetirarAcentos($frase) {
$frase = str_replace(array("à","á","â","ã","ä","è","é","ê","ë","ì","í","î","ï","ò","ó","ô","õ","ö","ù","ú","û","ü","À","Á","Â","Ã","Ä","È","É","Ê","Ë", "Ì","Í","Î","Ò","Ó","Ô","Õ","Ö","Ù","Ú","Û","Ü","ç","Ç","ñ","Ñ"),
array("a","a","a","a","a","e","e","e","e","i","i","i","i","o","o","o","o","o","u","u","u","u","A","A","A","A","A","E","E","E","E","I","I","I","O","O","O","O","O","U","U","U","U","c","C","n","N"), $frase);
return $frase;
}
/*
Retira os espaços no início e final da
string e garante que o valor definido
com maxlength não é ultrapassado.
*/
$q = substr(trim($_GET['q']),0,35);
print '
<div align="center">
<form action="'.$_SERVER['PHP_SELF'].'" method="get" title="Pesquisar">
<table>
<tr valign="top">
<td width="50%">
<input name="q" type="text" size="25" maxlength="35"/>
</td><td width="50%" align="left">
<input type="submit" value="Pesquisar" onclick="this.disabled=true;this.value=\'A pesquisar\'; this.form.submit();"/>
</td>
</tr>
</table>
</form>
</div>';
if(!empty($q))
{
/*
Um pequeno extra que vai
fazer a contagem do tempo
que o script levou a fazer
o seu trabalho...
*/
$inicio = microtime();
/*
A maioria dos alojamentos está preparado
para limitar a execução de um script se
este ultrapassar 30 segundos.
(A pré definição são 60 segundos no
ficheiro de configuração do php - php.ini)
Para evitar erros caso o tempo de
execução ultrapasse o valor definido
pela configuração esta é a solução.
*/
set_time_limit(0);
/*
É importante filtrar caracteres indesejados
que poderiam comprometer a execução da pesquisa.
*/
$q = str_replace(array(".", "&", "#", "$", "+", "-",'"',"'","/","\\","*","<",">"), "", $q);
/*
A função que retira
a acentuação...
*/
$chave = RetirarAcentos($q);
/*
Aqui começa a configuração:
Deves indicar todas as páginas que
pretenderes que sejam pesquisadas.
Basta meter os URL das páginas, sejam
páginas php, html, xhtml, etc, etc...
Obviamente que quanto mais URLs inserirem,
mais demora o tempo de resposta, logo
aconselho apenas a pesquisarem somente nas
páginas de conteudo mais relevente...
*/
$paginas = array(
"http://teste.com/index.php",
"http://teste.com/menu.html",
"http://teste.com/pagina/index.php",
"http://teste.com/dir/teste.php?u=teste"
);
/*
É tipo baralhar de cartas, neste
caso as cartas são as páginas ;)
*/
sort($paginas, SORT_REGULAR);
/*
Fazemos um loop pelas páginas
*/
for($i = 0; $i < count($paginas); $i++) {
/*
A função principal está aqui
*/
$tags = @get_meta_tags($paginas[$i]);
/*
Verificamos se a meta tag description
existe ou se não está vazia
*/
if (!empty($tags["description"]))
{
/*
Aqui procuramos a palavra chave e...
*/
if(preg_match("/(.*?)($chave{0})(.*)/i", RetirarAcentos($tags["description"])))
{
/*
...se encontrada, guardamos
o link da página numa array
*/
$resultados[] = $paginas[$i];
/*
Somamos os resultados
*/
$valores++;
$encontrado = 1;
}
}
/*
Segue-se a busca mas agora nas meta tags keywords...
*/
if (!empty($tags["keywords"]) && $encontrado < 1)
{
if(preg_match("/(.*?)($chave{0})(.*)/i", RetirarAcentos($tags["keywords"])))
{
$resultados[] = $paginas[$i];
$valores++;
}
}
if ($encontrado)
{
/*
Quando encontramos as palavras chaves
na meta tag da descrição,
guardamo-las numa nova array, para as
apresentar juntamente com o resultado
*/
$x_descricao[] = $tags["description"];
/*
Comos andamos as voltas dentro de um loop, :)
é necessário definir a variavel $encontrado
novamente para 0
*/
$encontrado = 0;
}
}
/*
Contamos os resultados...
*/
$valores = count($resultados);
/*
Caso a pesquisa tenha encontrado resultados...
*/
if ($valores > 0)
{
echo "<b>";
if ($valores=="1")
echo "Encontrado $valores resultado";
else
echo "Encontrados $valores resultados";
echo " para <em>$q</em>:</b><br/><br/>\n";
echo "<table width=\"80%\" align=\"center\">\n";
for($i = 0; $i < $valores; $i++) {
/*
Ainda não terminamos... Falta-nos o título para apresentar!!
Assim, o script vai ler a página a procura das tags <title>
*/
$leitura = fopen($resultados[$i], "r");
/*
Para poupar recursos e tempo, começamos por ler
220 bytes da página, o que normalmente é suficiente....
*/
eregi("<title>(.*)</title>", fread($leitura, 220), $x_titulo);
/*
Caso 220 bytes não chegem para alcançar
as tags <title>, vamos ler novamente a página,
mas desta vez aumentamos a leitura para 1 Kb
*/
if($x_titulo[1] == "") {
eregi("<title>(.*)</title>", fread($leitura, 1024), $x_titulo);
}
fclose($leitura);
echo "<tr>
<td>";
/*
Finalmente, apresentamos os resultados da pesquisa.
*/
echo "<a href=\"".htmlspecialchars($resultados[$i])."\">".htmlspecialchars($x_titulo[1])."</a><br/>\n";
echo eregi_replace($q, "<b>".$q."</b>", htmlspecialchars($x_descricao[$i]));
if (!empty($x_descricao[$i])) { echo "<br/>\n"; }
echo "<font color=\"green\" size=\"2\">".htmlspecialchars($resultados[$i])."</font><br/><br/>\n";
echo "</td>
</tr>";
}
echo "</table>\n";
} else {
/*
Para o caso de não serem encontrados resultados na pesquisa
*/
echo "<div align=\"center\">Não foram encontrados resultados para a sua pesquisa.</div>\n";
}
/*
Calculamos e mostramos o tempo de execução da pesquisa...
*/
$fim = microtime();
$tempo = number_format(((substr($fim,0,9)) + (substr($fim,-10)) - (substr($inicio,0,9)) - (substr($inicio,-10))),4);
echo "<center><font size=\"-2\">Executado em $tempo segundos</font></center>";
}
?>
<br/>
<div align="center">
<hr width="80%">
<p class="p">
Sistema Simples de Pesquisa em PHP<br/>
Elaborado por =IceBurn= © <a href="http://www.tenhamedo.net">www.tenhamedo.net</a>
</p>
</div>
</td>
</tr>
</table>
</body>
</html>