"search engine maken"
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', 'blaat.txt'));
?>
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.
Er zijn scripts om dat te controleren toch?
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
edit:
Ik had wat aangepast, werkt het hiermee wel:
Code (php)
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
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;
}
?>
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
Code (php)
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
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;
}
?>
// 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
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)
1
2
3
4
2
3
4
<?php
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));
?>
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));
?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
Gewijzigd op 01/01/1970 01:00:00 door Lennart
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)
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
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;
}
?>
// 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
Gewijzigd op 01/01/1970 01:00:00 door Lennart
Is jou regel 29 het zelfde als mijn regel 29?
edit:
Woooeeiii, hij doet ut :D
edit:
Maak van:
Code (php)
1
2
3
2
3
<?
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));
?>
print_r(zoek_bestand('/www/htdocs/jbtech/jbtransport/intranet/zoek/test/', $searchword));
?>
dit:
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
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!!!!
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.
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.
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.
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)
1
2
3
4
5
2
3
4
5
<?php
// Map waar de bestanden in staan waaruit gezocht kan worden
session_start();
?>
// 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)
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
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>";
?>
$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>
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)
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
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);
}
{
}
?>
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