"search engine maken"

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Martijn B

Martijn B

23/11/2007 15:47:00
Quote Anchor link
En als je dit invult?:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', 'blaat.txt'));


?>


De functie print_r is trouwens gewoon om het resultaat te bekijken.
 
PHP hulp

PHP hulp

24/11/2024 16:47:21
 
Lennart

Lennart

23/11/2007 15:50:00
Quote Anchor link
Er zijn scripts om dat te controleren toch?
 
Lennart

Lennart

23/11/2007 15:52:00
Quote Anchor link
ik heb PHP Version 4.4.0

als ik die regel toevoeg errort ie niet meer maar hij komt wel terug met een lege array. MAAR!!! er is vooruitgang. Alleen vreemd dat de arry leg blijft.
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/11/2007 15:54:00
Quote Anchor link
En zo dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
print_r(zoek_bestand('./', 'blaat.txt'));
?>


edit:

Ik had wat aangepast, werkt het hiermee wel:
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
<?
function grijp_alles($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, grijp_alles($map . $item . '/', $zoekbestand));
        }

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

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


    closedir($handle);
    return $aGevonden;
}

?>


Weet je zeker dat er wat gevonden wordt?
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 16:06:00
Quote Anchor link
Dan blijft de array nog steeds leeg. Hij maakt dan geen error. Ik zal je de code nog een keer gevem.

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
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();
$searchword = $_SESSION["search"] = $_POST['search'];
$map = ".";
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', '$searchword'));

function
zoek_bestand($map, $searchword)
{

    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 . '/', $searchword));
        }

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

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


    closedir($handle);
    return $aGevonden;
}

?>



ik weet niet of er wat gevonden word. Er staan wel files maar die komen niet te voorschijn.
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/11/2007 16:12:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
elseif( strpos(strtolower($searchword), strtolower($item)) !== false )
?>


Hooiberg en naald moet je omwisselen. 1e parameter van strpos is de hooiberg en 2e de naald.
http://nl.php.net/strpos

Kijk maar naar mijn code.

edit:

Geen enkele-quotes om $searchword. Wat je wil de inhoud van de variabele in de functie stoppen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));

?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 16:16:00
Quote Anchor link
Ja ik moet toch juist de variable gebruiken van de search die ik wil uitvoeren?
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/11/2007 16:20:00
Quote Anchor link
De functie strpos zoekt in een hooiberg naar een naald.
Je kent die uitdrukken wel denk ik ;P

Als de naald in de hooiberg zit dan heb je een bestand gevonden.


Dan verbeter ik je code wel:
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
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();
$searchword = $_SESSION["search"] = $_POST['search'];
$map = ".";
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));

function
zoek_bestand($map, $searchword)
{

    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 . '/', $searchword));
        }

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

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


    closedir($handle);
    return $aGevonden;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 16:27:00
Quote Anchor link
Ik ben zeker bekend met het gezegte ;). Hij doet het met jou code nog niet. Ik raak wat gefrustreed. Kijk anders even mee met me op;
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/11/2007 16:31:00
Quote Anchor link
Hij doet het wel kijk maar eens eronder.

Is jou regel 29 het zelfde als mijn regel 29?

edit:

Woooeeiii, hij doet ut :D

edit:

Maak van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));
?>


dit:

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
<?php
$aZoekresultaat
= zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword);

# Als de array leeg is.
if( empty($aZoekresultaat) )
{

  echo 'Geen resultaat!';
}

else
{
  # De array uitprinten als test
  print_r($aZoekresultaat);
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/11/2007 16:39:00
Quote Anchor link
ja hij doet het nu helemaal!!! Je word super bedankt!!!! Ik moet nu alleen nog een if die zegt er zijn geen bestanden gevonden en hij moet er nog een link van maken. Maar dit ziet er echt goed uit!!!!
 
Arend a

Arend a

23/11/2007 21:21:00
Quote Anchor link
Goede zoekmachines is behoorlijk interessante, maar complexe materie.

Als je serieus bent over je search engine raad ik je aan naar zend_lucene te kijken uit het zend framework. Lucene is een zoekmachine met verschillende implemenaties, maar met het grootste voordeel dat het sematische samenhang zoekt. Dus ook dat je bepaalde documenten die overeenkomsten hebben kan vinden. (zoals google dat doet). Ook zitten er redelijk goede opties voor 'stemming' in. Ook maakt hij een index van alle sleutelwoorden, zodat je niet voor elke zoekopdracht alle bestanden hoeft te doorzoeken.
 
Lennart

Lennart

26/11/2007 08:39:00
Quote Anchor link
Arend schreef op 23.11.2007 21:21:
Goede zoekmachines is behoorlijk interessante, maar complexe materie.

Als je serieus bent over je search engine raad ik je aan naar zend_lucene te kijken uit het zend framework. Lucene is een zoekmachine met verschillende implemenaties, maar met het grootste voordeel dat het sematische samenhang zoekt. Dus ook dat je bepaalde documenten die overeenkomsten hebben kan vinden. (zoals google dat doet). Ook zitten er redelijk goede opties voor 'stemming' in. Ook maakt hij een index van alle sleutelwoorden, zodat je niet voor elke zoekopdracht alle bestanden hoeft te doorzoeken.


Het idee van deze zoek "engine" is dat hij een directory met bestanden doorzoekt waar geen database aan hangt. Ook is het absoluut niet gewenst dat andere mensen die bestanden kunnen inzien. Dus simpele code die ik begrijp en geen database. Dat was eigenlijk wat ik zocht. Ik heb inmiddels wel gezien dat een database heel veel voordelen heeft. Ik heb hier alleen op het werk geen database tot me beschikking.
 
Lennart

Lennart

29/11/2007 15:36:00
Quote Anchor link
Ik loop inmiddels tegen wat problemen met de zoekfuntie.

Ik krijg als ik hem leeg laat zoeken een hoop errors. Als ik daar een if voor ingooi doet ie dat niet meer maar typ ik dan iets bij zoeken blijft ie leeg. Ik ben ook wat aan het klote geweest met de Glob funtie en heb tot nu toe dit (het script zonder glob funtie;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();

?>

<table width="90%" border="1" cellpadding="0" cellspacing="0" bordercolor="#CCCCCC" id="demo" class="ruler">
<tr bgcolor="#669ACC">
<td width="60%" height="23"><span class="style1">Zoekresultaten</span></td>
</tr>
<tr>
<td>
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
41
42
43
44
45
46
<?php
$emptysearch
= $_POST['search'];
if(empty($emptysearch) )
{

echo "<b>Er zijn geen zoekresultaten gevonden omdat u het zoekveld leeg heeft gelaten! <br> Voer een zoekopdracht in bij het zoekveld en druk op search</b>";
}

else
{
$searchword = $_SESSION["search"] = $_POST['search'];
$map = ".";
function
zoek_bestand($map, $searchword)
                    {

print_r(zoek_bestand('/www/***/****/****/intranet/', $searchword));
    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 . '/', $searchword));
        }

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

            $agevonden = $map . $item;
        }
    }

    closedir($handle);
    $infile = "/www/****/*****/*****/intranet/intranet/";
    $filename = stristr ($agevonden,basename ($infile));
    $filename2 = explode ("/intranet/" , $filename);
    $filename3 = "http://intranet.jbbesturingstechniek.nl/intranet/";
    $filename4 = $filename3 . $filename2[1];
    $filename5 = "<A HREF='" . $filename4 . "'>$filename2[1]</A>";
    echo "<tr><td>" . $filename5 . "</td></tr>";
?>

<tr>
<td>
</table>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
                        }
}

 ?>


Ik wil eigenlijk kunnen zoeken. Ik heb dit script al samen met Martijn! gemaakt. Er zijn alleen een paar beperkingen in het script. Als hij iets vind in een map gaat hij de map gelijk uit. Dit terwijl er nog meer resultaten in een map staan. Ook als de zoekbalk leeg verzend krijg je een hoop errors. Ik heb me ook laten vertellen dat de globfuntie meer bied maar ik loop daar echt op vast.

Dit heb ik met de globfunctie maar daar word ik helemaal gek van. Ik kom maar 1 laag die en krijg de namen van bestanden alleen terug en de mappen.

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
<?php
session_start();
$search = $_POST['search'];
$searchword = $_SESSION["search"] = $_POST['search'];
if(empty($search) )
{

echo "<b>Er zijn geen zoekresultaten gevonden omdat u het zoekveld leeg heeft gelaten! <br> Voer een zoekopdracht in bij het zoekveld en druk op search</b>";
}

else {
$dir = $_SERVER['DOCUMENT_ROOT'] . "/intranet";
foreach (glob($dir . "/*", GLOB_ONLYDIR) as $dirname1)
    if ($handle = opendir($dirname1)) {
        while (false !== ($file1 = readdir($handle))) {
            if ($file1 != "." and $file1 != ".." and $file1 != "dir") {
                    echo $file1 . "<br>";
            
    
    
    }
    }    
    }

    closedir($handle);
}  
{                                                 
}

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

Pagina: « vorige 1 2



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.