"search engine maken"
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.
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.
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!
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
Als je kijkt op: 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 ;).
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
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
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?
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
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?
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?
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
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/" ???
if( !$handle = opendir($map) )
volgens de fout code loopt ie daar op vast.
Gewijzigd op 01/01/1970 01:00:00 door Lennart