"search engine maken"

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Lennart

Lennart

22/11/2007 23:16:00
Quote Anchor link
Php ers,

ik wou eigenlijk een script maken waarmee ik als het ware een zoekfunctie in een veld typ. Het php script dan een directory uitleest en met mogelijke matches terug komt. Kan iemand me een setje in de goede richting geven.
Eigenlijk word het dus een zoek functie zonder data base.
 
PHP hulp

PHP hulp

24/11/2024 16:49:30
 
Thijs X

Thijs X

23/11/2007 01:02:00
Quote Anchor link
Voorbeeldje ( niet getest )

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
$zoekwoord = "ww";
$map = ".";

$aBestanden = scandir($map);
$aGevonden = array();

foreach($aBestanden as $bestand)
{

    if(strstr($bestand, $zoekwoord))
    {

        $aGevonden[] = $bestand;
    }
}


if(empty($aGevonden))
{

    echo "Niks gevonden";
}

else
{
    print_r($aGevonden);
}

?>


Even een opmerking, je hebt voor scandir wel PHP 5 > nodig
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
- -

- -

23/11/2007 06:56:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$zoekwoord
= 'ww';
$map = '.';

$aBestanden = scandir($map);
$bGevonden = false;

foreach ($aBestanden as $sBestand)
{

    $sBron = file_get_contents($sBestand);
    if (strstr($sBestand, $zoekwoord) OR strstr($sBron, $zoekwoord))
    {

        echo '<a href="' . $map . '">' . $sBestand . '</a><br />';
        $bGevonden = true;
    }
}


if (!$bGevonden)
{

    echo 'Niks gevonden';
}

?>
 
Lennart

Lennart

23/11/2007 11:31:00
Quote Anchor link
Alvast bedankt voor de reactie's. Ik heb alleen de pech dat ik php 4 heb en die ondersteund inderdaad geen scandir :(. Ik kan helaas niet zelf me versie verhogen.
 
Thijs X

Thijs X

23/11/2007 13:15:00
Quote Anchor link
Dat maakt niet uit dan kan je altijd nog readdir gebruiken

Voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
$zoekwoord = "test";
$map = ".";

$aGevonden = array();

if ($handle = opendir($map))
{

    while (false !== ($bestand = readdir($handle)))
    {
  
        if(strstr($bestand, $zoekwoord))
        {

            $aGevonden[] = $bestand;
        }
    }


    closedir($handle);
}


if(empty($aGevonden))
{

    echo "Niks gevonden";
}

else
{
    print_r($aGevonden);
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
Lennart

Lennart

23/11/2007 13:40:00
Quote Anchor link
Kijk hier kom ik al een heel eind mee. Hier ga ik even mee stoeien!
 
Martijn B

Martijn B

23/11/2007 13:47:00
Quote Anchor link
Als je kijkt op: http://nl.php.net/scandir

Dan vind je een alternatief voor PHP4.

Misschien dat je dit zelf ook had kunnen vinden....

edit:

Typte ik heel subtiel :P
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 14:18:00
Quote Anchor link
Het is niet dat ik lui ben maar ik kom net kijken met php en zie soms door de bomen het bos niet meer en gebruik dan het forum om advies te vragen. Ik vraag niet om kant en klare php scripts maar een stetje in de goede richting! No hard feelings ;).
 
Martijn B

Martijn B

23/11/2007 14:22:00
Quote Anchor link
ok ik begrijp je ;D

Maar dat weet je nu dat iedere functie van PHP duidelijk staat beschreven en dat je daar vaak veel info vanaf kunt halen. Trouwens je moet altijd wel de Engelse documentatie hebben de Nederlandse klopt soms niet helemaal.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 14:32:00
Quote Anchor link
Ik maak het mezelf al beginnen ook niet echt makkelijk :P.
De nederlandse info is idd vaak ver van perfect en compleet.
Kan iemand me misschien verder helpen met het script want ik zit echt vast!
Ik heb het volgende;

deze zoekt. Maar hij gaat bijvoorbeeld niet in subdirectory's

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();
$searchword = $_SESSION["search"] = $_POST['search'];
$zoekwoord = "$searchword";
$map = ".";

$aGevonden = array();

if ($handle = opendir($map))
{

    while (false !== ($bestand = readdir($handle)))
    {
  
        if(strstr($bestand, $zoekwoord))
        {

            $aGevonden[] = $bestand;
        }
    }


    closedir($handle);
}


if(empty($aGevonden))
{

    echo "Niks gevonden";
}

else
{
    print_r($aGevonden);
}

?>


en het formulier

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
    session_start();
    $_SESSION["search"] = $_POST['search'];
?>

<form action="indexsearch.php" method="post">
<input type="text" name="search">
<input type="submit" name="submit" value="Search">
</form>

Het zoeken gaat nu goed en hij vind ook wel wat alleen hij moet moet er ook links van maken en in subdirectory's kunnen kijken. Ik kom wel steeds verder.
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/11/2007 14:55:00
Quote Anchor link
Deze functie doet het:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

print_r(zoek_bestand('c:/zoekmap/', 'blaat.txt'));

function
zoek_bestand($map, $zoekbestand)
{

    if( !$handle = opendir($map) )
    {

        return false;
    }


    $aGevonden = array();

    while( $item = readdir($handle) )
    {
  
        if( $item == '.' || $item == '..' )
        {

            continue;
        }

        
        //print_r($item . $bestand);
        if( is_dir($map . $item) )
        {

            $aGevonden = array_merge($aGevonden, zoek_bestand($map . $item . '/', $zoekbestand));
        }

        elseif( strpos(strtolower($zoekbestand), strtolower($item)) !== false )
        {

            $aGevonden[] = $map . $item;
        }
    }


    closedir($handle);
    return $aGevonden;
}


?>


edit:

Functie naam even aangepast.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 15:11:00
Quote Anchor link
Ik snap niet echt veel van het geen wat je net post. Kun je er wat uitleg bij brengen? Kan die van jou nou wel in subs komen?
 
Martijn B

Martijn B

23/11/2007 15:16:00
Quote Anchor link
Op regel 22 wordt gecontroleerd of het een map is. Zo ja, dan wordt "zoek_bestand" voor de 2e keer aangeroepen om in deze map te gaan zoeken.
Alles wat de functie als resultaat terug geeft wordt samengevoegd met het resultaat wat er (eventueel) al was.

Hierdoor kan de functie in bijna een oneindig aantal sub(subperdesub)mappen zoeken.

Dit heet recursief.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 15:22:00
Quote Anchor link
Oke weer wat geleerd. Alleen geeft ie me errors. Ik heb nu dit met jou info;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();
$searchword = $_SESSION["search"] = $_POST['search'];
$zoekwoord = "$searchword";
$map = ".";

print_r(zoek_bestand('/test', 'blaat.txt'));

function
zoek_bestand($map, $zoekbestand)
{

    if( !$handle = opendir($map) )
    {

        return false;
    }


    $aGevonden = array();

    while( $item = readdir($handle) )
    {
  
        if( $item == '.' || $item == '..' )
        {

            continue;
        }

        
        //print_r($item . $bestand);
        if( is_dir($map . $item) )
        {

            $aGevonden = array_merge($aGevonden, zoek_bestand($map . $item . '/', $zoekbestand));
        }

        elseif( strpos(strtolower($zoekbestand), strtolower($item)) !== false )
        {

            $aGevonden[] = $map . $item;
        }
    }


    closedir($handle);
    return $aGevonden;
}

?>


en ik krijg deze errors

Warning: opendir(): open_basedir restriction in effect. File(/test) is not within the allowed path(s): (/www/htdocs/jbtech:/tmp) in /www/htdocs/jbtech/jbtransport/intranet/zoek/indexsearch3.php on line 12

Warning: opendir(/test): failed to open dir: Operation not permitted in /www/htdocs/jbtech/jbtransport/intranet/zoek/indexsearch3.php on line 12

enig idee?
 
Martijn B

Martijn B

23/11/2007 15:26:00
Quote Anchor link
De map moet eindigen met een /

dus:

print_r(zoek_bestand('/test/', 'blaat.txt'));

edit:

Misschien dat je ook dit moet doen:


print_r(zoek_bestand('./test/', 'blaat.txt'));


Hierin "/www/htdocs/jbtech/jbtransport/intranet/zoek/" staat dus de map test?
Zo ja, dan moet je dus './test/' gebruiken.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 15:33:00
Quote Anchor link
oke ik ben 1 error kwijt alleen waar slaat blaat.txt op?
 
Martijn B

Martijn B

23/11/2007 15:37:00
Quote Anchor link
Het bestand wat je zoekt.

Als je doet "zoekbestand" dan vind de functie ook:

Zoekbestand.txt
122zoekbestanD.exe
weetikveelzoekbestandblaat

edit:

Dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
elseif( strpos(strtolower($zoekbestand), strtolower($item)) !== false )
?>

moet worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
elseif( strpos(strtolower($item), strtolower($zoekbestand)) !== false )
?>


Het zoekbestand moet in het te vinden bestand zitten en niet andersom.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 15:39:00
Quote Anchor link
oke dus waar blaat.txt staam moet ik een variable plaatsen? Ik krijg trouwens nog steeds een error, de volgende;

Warning: opendir(/www/htdocs/jbtech:/intranet/zoek/): failed to open dir: No such file or directory in /www/htdocs/jbtech/jbtransport/intranet/zoek/indexsearch3.php on line 12
 
Martijn B

Martijn B

23/11/2007 15:42:00
Quote Anchor link
De map test bestaat niet in "/www/htdocs/jbtech/jbtransport/intranet/zoek/" ???
 
Lennart

Lennart

23/11/2007 15:43:00
Quote Anchor link
ja dat is het hem nu juist die map bestaat wel :(

if( !$handle = opendir($map) )

volgens de fout code loopt ie daar op vast.
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Jan Koehoorn

Jan Koehoorn

23/11/2007 15:47:00
Quote Anchor link
Heb je PHP5? Gebruik dan glob
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.