2
i am having a problem in PHP. I created a search system with php without using database. the search works perfectly, the system can search a word in the files, the problem is in the display of the search results, the system before displayed the name of the files, but I am using regular expressions to display the title of the page, if it exists. the code works perfectly only when there are no line breaks after the . However, if I give a simple enter after the code does not work correctly. Here are the codes:
index php.
<form action="busca.php" method="get">
<input type="text" name="s"><br>
<input type="submit">
</form>
php search.
<?php
//verifica se existe o campo $_POST['pesquisa'] vindo do formulário
$pesq = (isset($_GET['s'])) ? trim($_GET['s']) : '';
//verifica se o campo está vazio
if(empty($pesq)){
echo 'Digite no campo de Busca';
}else{
//pasta onde está os arquivos da pesquisa
$pasta = "arquivos";
//arquivo atual
$atual = "$pasta/busca.php";
//faz a listagem dos arquivos da pasta indicada, e atribui a um array
$busca = glob("$pasta/*.{php,html}", GLOB_BRACE);
//percorre o array
foreach($busca as $item){
//verifica se o arquivo não é o atual
if($item !== $atual){
//abre o arquivo
$abrir = fopen($item, "r");
//faz um loop até chegar o final do arquivo
while(!feof($abrir)){
//ler arquivo
$lendo = fgets($abrir);
//remove os caracteres html e php
$conteudo = $lendo;
$lendo = strip_tags($lendo);
//verifica se tem algum um item da pesquisa
if(stristr($lendo, $pesq) == true){
//remove a extensão .php
$dados = str_replace(".php", "", $item);
//retorna o nome apenas do arquivo
$dados = basename($dados);
preg_match_all('/<title[^>]*>(.*?)<\/title>/',$conteudo, $matches, PREG_PATTERN_ORDER);
$title = isset($matches[1][0]) ? $matches[1][0] : $dados;
//coloca o link no array
$result[] = '<a href="?pagina='.$dados.'">'. $title.'</a>';
//apaga a variavel $dados
unset($dados);
}
//apague a variavel lendo
unset($lendo);
}
//fecha o arquivo
fclose($abrir);
}
}
/*IMPRIMIR O RESULTADO*/
//verifica seo result existe
if(isset($result) && count($result) > 0){
//remove os resultado iguais
$result = array_unique($result);
echo '<ul>';
//percorre o array
foreach($result as $link){
echo "<li>$link</li>";
}
echo '<ul>';
}else{
echo 'Nenhum resultado na busca';
}
}
?>
thanks friend saved me from a cold.
– fernando