"search engine maken"
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.
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.
Voorbeeldje ( niet getest )
Even een opmerking, je hebt voor scandir wel PHP 5 > nodig
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
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);
}
?>
// 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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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';
}
?>
$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';
}
?>
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.
Dat maakt niet uit dan kan je altijd nog readdir gebruiken
Voorbeeldje:
Voorbeeldje:
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
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);
}
?>
// 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
Kijk hier kom ik al een heel eind mee. Hier ga ik even mee stoeien!
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
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
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 ;).
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.
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
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
en het formulier
<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.
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)
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
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);
}
?>
// 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
<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
Deze functie doet het:
edit:
Functie naam even aangepast.
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
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;
}
?>
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
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?
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.
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
Oke weer wat geleerd. Alleen geeft ie me errors. Ik heb nu dit met jou info;
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?
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
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;
}
?>
// 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?
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.
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
oke ik ben 1 error kwijt alleen waar slaat blaat.txt op?
Het bestand wat je zoekt.
Als je doet "zoekbestand" dan vind de functie ook:
Zoekbestand.txt
122zoekbestanD.exe
weetikveelzoekbestandblaat
edit:
Dit:
moet worden:
Het zoekbestand moet in het te vinden bestand zitten en niet andersom.
Als je doet "zoekbestand" dan vind de functie ook:
Zoekbestand.txt
122zoekbestanD.exe
weetikveelzoekbestandblaat
edit:
Dit:
moet worden:
Het zoekbestand moet in het te vinden bestand zitten en niet andersom.
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
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
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
De map test bestaat niet in "/www/htdocs/jbtech/jbtransport/intranet/zoek/" ???
ja dat is het hem nu juist die map bestaat wel :(
if( !$handle = opendir($map) )
volgens de fout code loopt ie daar op vast.
if( !$handle = opendir($map) )
volgens de fout code loopt ie daar op vast.
Gewijzigd op 01/01/1970 01:00:00 door Lennart
Heb je PHP5? Gebruik dan glob




