Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marlon_renan

[Resolvido] php busca em um diretório

Recommended Posts

salve gente boa.

é o seguinte preciso desenvolver um sistema de busca, mas sem banco de dados, o script deve procurar nos nomes dos arquivos em um diretório.

 

Pensei em ler todo o diretório e em seguida verificar o nome do arquivo através da função strpos do php tipo assim:

<?php 

$chave = $_POST['chave'];
... (le o diretório e compara o nome do arquivo com o que tem na chave)

if(strpos($filename,$chave)!==false){
echo 'foi encontrado .. resultados';

} else {
echo 'sua busca não retornou resultados';
}

?>

Queria saber se existe uma forma mais fácil, ou outra maneira de fazer isso.

Agradeço aee galera, vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

depende da intenção. Existe a função glob(), que busca arquivos conforme alguns paadrões.

Você pode usar scandir() e filtrar cada índice do array, mas qual função usará, dependerá do tipo de filtro que deseja fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, será para filtrar arquivos em xml ou pdf, vou precisar trazer somente o nome do arquivo, e disponibilizá-lo para download. Procurei la no php.net a respeito da função glob(), mas é preciso informar qual a extenção do arquivo, ai no caso precisaria procurar todos os arquivos em pdf, depois todos os arquivos em xml?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa pergunta.

Pelo que vi, acho que glob() não aceita dois tipos de extensões.

 

VocÊ pode unir os dois arrays com array_merge().

 

 

 

 

Se alguém souber como fazer isso chamando glob só uma vez, avise. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo tentei desse jeito:

 

$chave = isset($_POST['chave']); // arquivo que o usuário está pesquisando

if($chave){
    
    $ext1 = 'xml';
    $ext2 = 'pdf';
    $result = array_merge((array)$ext1, (array)$ext2 );

    $c=0;
    for($i=0;$i<count($result); $i++){
        foreach (glob("*$chave*$result[$i]") as $filename) {
            echo "$filename<br/>";
            $c++;
        }
    }
    if($c==0){

        echo 'sua busca não retornou resultados';

    } else {

        echo 'foram encontrados <b>'.$c.'</b> resultados procurando por <b>'.$chave.'</b>';
    }
    
}

funcionou mas o único problema é case sensitive ;)

Agradeço pela ajuda kra, vlw, fica com Deus

abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Minha sugestão era colocar as saídas de glob() no array. Seu script está executando glob() dentro de loop. Isso é bem pouco eficiente.

 

Veja a dica do Matias Resende também. É uma boa soulução

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.