Szukam prostego skryptu, który realizowałby prościutkie wyszukiwanie na podstronach www. (Nie w bazie mysql!) Stronę mam bez bazy, tylko html i css, mogę przerobić na php. Chodzi mi o samo okienko "search", wyniki na osobnej podstronie, jeden pod drugim z kawałkiem tekstu z "otoczenia" znalezionej frazy
znalazłem taki prosty kod:
<?php $gdzie_szukac = 'http://domena.tld'; http://www.php.net/echo '<a target=_blank href='."$gdzie_szukac".'/>'.$gdzie_szukac.'</a>'; $tekst = http://www.php.net/file_get_contents( $gdzie_szukac ); $wzorzec = '/szukany_ciag/'; http://www.php.net/preg_match_all($wzorzec, $tekst, $wyniki); if (http://www.php.net/count($wyniki[0]) > 0) { http://www.php.net/echo ' - znalazlem'; } else http://www.php.net/echo ' - nie znalazlem'; ?>
http://www.php.net/echo ' - znalazlem';
ten Twoj przyklad jest be z sensu. Po pierwsze pobierze 'cośtam' z jednego pliku.
Można go przerobić na taki który ściąga z kilku plików. Już na upartego powiedzmy że są to pliki tekstowe. Chodzi mi o funkcje, które wyświetlą szukany string wraz z jego najbliższymi liniami.
<?php if(!function_exists('Sh')) { function ShowAllTree($main) { $deny = http://www.php.net/array('index.php', 'index2.php'); // pliki ktorych nie chcesz $sll = http://www.php.net/array(); $dir = scandir($main); foreach($dir as $file) { if($file != '.' && $file != '..' && (!http://www.php.net/in_array($file, $deny))) { if(!http://www.php.net/is_dir($file)) { $all[] = $file; } } } return $all; } } $tabr = ShowAllTree('./'); $szukana = 'kota'; $nr=0; foreach($tabr as $next) { $slowa = http://www.php.net/explode(" ",http://www.php.net/join(" ",http://www.php.net/file("./".$next))); for($tmp=0;$tmp<count($slowa);$tmp++) { if(http://www.php.net/strstr($slowa[$tmp],$szukana)){ $nr++; $tmpData[]="[$nr]<br>"; for($i=$tmp-5;$i<=$tmp+5;$i++){ if(http://www.php.net/isset($slowa[$i])) { if($i==$tmp) { $tmpData[http://www.php.net/count($tmpData)-1].="<b>$slowa[$i]</b> "; }else{ $tmpData[http://www.php.net/count($tmpData)-1].="$slowa[$i] "; } } } $tmpData[http://www.php.net/count($tmpData)-1].="..."; $tmpData[http://www.php.net/count($tmpData)-1].="<a HREF='$next'>Wiecej...</A>"; } } } foreach($tmpData as $val) { http://www.php.net/print $val; } ?>
Jak to zastosować do strony? Chcę umieścić formularz wyszukiwania na stronie index i jeszcze kilku innych i niech przeszukuje katalog z wyłączeniem niektórych plików (graficznych i innych). Jak uruchamiać te funkcje?
Ten kod jest dla mnie zbyt skomplikowany.
czy umieści ten kod w osobnym pliku np search.php i uruchamiać go post?
<?php function ShowAllTree($main) { $deny = http://www.php.net/array('index.php', 'index2.php', 'znajdz.php'); // pliki ktorych nie chcesz $sll = http://www.php.net/array(); $dir = scandir($main); foreach($dir as $file) { if($file != '.' && $file != '..' && (!http://www.php.net/in_array($file, $deny)) && (http://www.php.net/substr($file,-http://www.php.net/strlen('.php'))=='.php') ) { if(!http://www.php.net/is_dir($file)) { $all[] = $file; } } } return $all; } $tabr = ShowAllTree('./'); $szukana = 'kota'; $nr=0; foreach($tabr as $next) { $slowa = http://www.php.net/explode(" ",http://www.php.net/join(" ",http://www.php.net/file("./".$next))); for($tmp=0;$tmp<count($slowa);$tmp++) { if(http://www.php.net/strstr($slowa[$tmp],$szukana)){ $nr++; $tmpData[]="[$nr]<br>"; for($i=$tmp-5;$i<=$tmp+5;$i++){ if(http://www.php.net/isset($slowa[$i])) { if($i==$tmp) { $tmpData[http://www.php.net/count($tmpData)-1].="<b>$slowa[$i]</b> <p>"; }else{ $tmpData[http://www.php.net/count($tmpData)-1].="$slowa[$i] "; } } } $tmpData[http://www.php.net/count($tmpData)-1].="..."; $tmpData[http://www.php.net/count($tmpData)-1].="<p>"; $tmpData[http://www.php.net/count($tmpData)-1].="<a HREF=$next>Wiecej...</A><p>"; } } } foreach($tmpData as $val) { http://www.php.net/print $val; } ?>
$deny = http://www.php.net/array('index.php', 'index2.php', 'znajdz.php');
(http://www.php.net/substr($file,-http://www.php.net/strlen('.php'))=='.php') )
Działa świetnie. Pomogłeś. Dzięki.
Jest tylko jeden problem. Wyszukiwarka traktuje osobno wielkie i małe litery. Jak M to znajduje Matematyka jak m matematyka a tamtego już nie ma w listingu
jak usunąć to case sensitive
Do lower case jest funkcja strtolower();
Żeby było jak chcesz to musisz objąć szukaną frazę tą funkcją i ciag znaków rownież.Czyli to co jest w f. strtr(). Mozna tez zamienic wszystko na duże bo to znaczenia nie ma. Ważne żeby jedno i drugie mialo albo male albo duze litery zeby moc porownac. Jesli chcesz na duże (upper case) to strtoupper().
Dla wyniku to nie ma znaczenia bo to sie wykona w locie a wynik i tak sie wyswietli taki jaki jest w originale.
ale gdzie dokładnie wpisać to strtolower()
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)