Sign in to follow this  
dammy

Podem Me Ajudar A Entender Este Código?

Recommended Posts

Estou usando um script pronto para busca interna e está funcionando certinho, só que retorna o endereço completo com o nome do arquivo em que a palavra foi encontrada.

Vocês podem me explicar por que o código abaixo não está retornando o título da página?

(Quero que a busca seja efetuada na página inteira e, ao ser encontrada a palavra, retorne o titulo da página)

function s_print_title_desc($file_n) {

$file = @file($file_n);

if ($file) {

$line_complete = implode('', $file);

eregi("<title>(.*)</title>", $line_complete, $out);

$title = trim($out[1]);

if(isset($title)&&strlen($title)>0) $line_complete = str_replace($title, "", $line_complete);

$line_complete = strip_tags($line_complete);

$line_complete = trim($line_complete);

$line_complete = trim(substr($line_complete, 0, 400));

echo "<li><b><a href=\"$file\">";

if (isset($title)&&strlen($title)>0)

echo "$title</a></b> <font size=\"-1\">- <i>$file</i></font>";

else

echo "$file</a></b>";

echo "<br>$line_complete\n<br>&nbsp;";

}

else {

echo "<li><a href=\"$file_n\"><b>$file_n</b></a><br>";

}

}

Com esta parte do código dá pra vocês me orientarem sobre qual alteração fazer? Ou tenho que postar tudo? é que é um pouco grande...

Preciso, pelo menos, entender o código acima, já pesquisei no manual, mas não consegui entender muito bem.

Qual a razão desse if ($file)????

$file e $file_n não deveriam ser iguais???

Obrigada.

Share this post


Link to post
Share on other sites

file() é uma função do php da uma olhada no php.net que entende melhor o funcionamento..

sobre o codigo:

o que voce tem entre o <title> </title> o sistema deve estar retornando este conteudo..

Share this post


Link to post
Share on other sites

Poxa, pessoal, muito obrigada pela atenção. :)

Estou precisando muito resolver isso.

Então... eu já conferi as funções no manual php.net, mas estou tendo dificuldade para entender como funciona o código acima. Faz parte de uma busca interna nas páginas do site.

O $title e o $file não estão retornando nada, apenas o $file_n retorna o link para a página.

Tem como alterar esse código para que pegue o título da página que tem a palavra procurada?

O <title> está colocado logo após o <head> em todas as páginas, cada página tem um nome (title).

Segue abaixo o código, ainda não é completo, tirei só a parte que se refere à instalação, porque é grande demais, espero não ter apagado alguma cisa relevante... mas acho que não...

<html>

<head>

</head>

<body>

<?php

// Variables

// Set your username and password. Leave blank if you don't want any protection.

$user = "123";

$pass = "123";

// The full system path to the files you wish to index. DO NOT include trailing slash.

$file_root = "/home/site/";

// The URL equivilent of the above. DO NOT include trailing slash.

$http_root = "http://www.site.com.br/site/";

// The full system path to the index file.

$index_file = "/home/site/search/search_index.dat";

// Set to true if you wish the time taken to be displayed when searching, false otherwise:

$show_time_search = true;

// Displays time taken when indexing if true:

$show_time_index = true;

// The array file file extentions to index. The extentions must be readable (no exe, jpg, gif)

$include_extentions = array('html','htm','shtml','shtm', 'php', 'php3', 'phtml', 'php4', 'txt',);

// Message variables:

$err_no_results = "Nenhum resultado foi encontrado.";

// Sets start time.

$timeparts = explode(" ",microtime());

$starttime = $timeparts[1].substr($timeparts[0],1);

if (isset($query)) s_control($query);

elseif (substr($QUERY_STRING,0,5) == "index") i_control();

else s_print_search_form("");

//c_print_footer();

function s_control($que) {

$orig = $que;

$result_arr = s_search($que);

$result_count = sizeof($result_arr);

if ($result_count < 1) {

echo "<br><br><h4 align=\"center\">$GLOBALS[err_no_results]</h4>";

// s_print_search_form($que);

}

else {

// s_print_search_form($orig);

echo "

<h1>Resultados da Busca</h1>

<h3><i>Resultados: 1 - $result_count de \"$orig\"</i></h3>

<ul>";

foreach ($result_arr as $result)

s_print_title_desc($result);

echo "</ul>";

}

}

function s_search($query) {

// Searches for query in the index file.

$query = trim(strtolower(c_strip_chars($query)));

$search_data = @file($GLOBALS[index_file]) or die("<h4 align=\"center\">$GLOBALS[err_no_search_db]</h4>");

$pages_found = " ";

foreach ($search_data as $search_page) {

$page_arr = explode("|", $search_page);

$found_count = 0;

$qry_array = split('[, ]+',trim(strtolower($query)));

foreach ($qry_array as $qry) {

if (in_array($qry, $page_arr)) {

++$found_count;

$pages_found .= $page_arr[0] . " ";

}

}

if ($found_count == count($qry_array)) $result_arr[] = $page_arr[0];

}

return $result_arr;

}

function s_print_title_desc($file_n) {

$file = @file($file_n);

if ($file) {

$line_complete = implode('', $file);

eregi("<title>(.*)</title>", $line_complete, $out);

$title = trim($out[1]);

if(isset($title)&&strlen($title)>0) $line_complete = str_replace($title, "", $line_complete);

$line_complete = strip_tags($line_complete);

$line_complete = trim($line_complete);

$line_complete = trim(substr($line_complete, 0, 400));

echo "<li><b><a target=\"principal\" href=\"$file\">";

if (isset($title)&&strlen($title)>0)

echo "$title</a></b> <font size=\"-1\">- <i>$file</i></font>";

else

echo "$file</a></b>";

echo "<br>$line_complete\n<br>&nbsp;";

}

else {

echo "<li><a href=\"$file_n\"><b>$file_n</b></a><br>";

}

}

function s_print_search_form($query) {

?>

<div align="center"><form method="post" target="principal" >

<h4>Buscar:</h4>

<input type="text" name="query" value="<?php echo $query ?>">

<br><input type="submit" value="Buscar">

</form></div>

<?php

}

function i_get_files($dirname) {

// Navigates through the directories recurrsively and retrieves a listing in an array.

if($dirname[strlen($dirname)-1] != "/") $dirname.="/";

static $result_array = array();

$mode = fileperms($dirname);

if(($mode & 0x4000) == 0x4000 && ($mode & 0x00004) == 0x00004) {

chdir($dirname);

$handle = @opendir($dirname);

}

if(isset($handle)) {

while ($file = readdir($handle)) {

if($file=='.'||$file=='..') continue;

if(is_dir($dirname.$file)) i_get_files($dirname.$file.'/');

else $result_array[] = $dirname.$file;

}

closedir($handle);

}

return $result_array;

}

// Display time taken.

if(isset($query)) {

if($show_time_search) {

$timeparts = explode(" ",microtime());

$total_time = ($timeparts[1].substr($timeparts[0],1)) - $starttime;

echo "<br><center><font size=\"0\"><i>em: ".substr($total_time,0,4)." segs.</i></font><br></center>";

}

}

elseif (substr($QUERY_STRING,0,5) == "index") {

if($show_time_index) {

$timeparts = explode(" ",microtime());

$total_time = ($timeparts[1].substr($timeparts[0],1)) - $starttime;

echo "<br><center><font size=\"0\"><i>em: ".substr($total_time,0,4)." segs.</i></font><br></center>";

}

}

?>

</body>

</html>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this