<?php //******************************************************* //paikallinen haku $localsearch = 0; //jos paikallinen haku on päällä, listaa tiedostot joista haetaan $files = array(); $files[] = "index.php"; $files[] = "muuta.php"; $files[] = "linkit.php"; $files[] = "palaute.php"; //******************************************************* $caps = $_GET['caps']; $keyword = $_GET['keyword']; $keyword = str_replace(" ", "", $keyword); $target = $_GET['target']; $target = str_replace("http://", "", $target); ?> <form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Hakusana: <input type="text" name="keyword" size="24" value="<?php if ( $keyword != null ) { echo $keyword; } else { echo ""; } ?>" /> <?php if ( $localsearch == 0 ) { ?> <br />Kohde: <input type="text" name="target" size="35" value="<?php if ( $target != null ) { echo "http://$target"; } else { echo "http://"; } ?>" /> <?php } ?> <br />Sama kirjainkoko: <input type="checkbox" name="caps" value="yes" <?php if ( $caps == "yes" ) { echo "checked=\"checked\""; } ?> /> Kyllä <br /><input type="submit" name="submit" value="Hae" /> </form> <?php if ( $keyword != null ) { function search($target, $keyword, $caps) { $file = file("$target"); for ( $i=0; $i<count($file); $i++ ) { $file[$i] = str_replace("<", " <", $file[$i]); $file[$i] = str_replace(">", "> ", $file[$i]); $file[$i] = str_replace(".", " ", $file[$i]); $file[$i] = str_replace(",", " ", $file[$i]); $file[$i] = str_replace("\"", " ", $file[$i]); $file[$i] = str_replace("/", " ", $file[$i]); $file[$i] = str_replace("(", " ", $file[$i]); $file[$i] = str_replace(")", " ", $file[$i]); $file[$i] = str_replace("[", " ", $file[$i]); $file[$i] = str_replace("]", " ", $file[$i]); $file[$i] = str_replace("!", " ", $file[$i]); $file[$i] = str_replace("?", " ", $file[$i]); $file[$i] = str_replace("-", " ", $file[$i]); $data[$i] = preg_replace("/\r\n|\n\r|\n|\r/", "", $file[$i]); $word = explode(" ", $data[$i]); for ( $j=0; $j<count($word); $j++ ) { if ( $caps == "yes" ) { if ( $keyword == $word[$j] ) { return true; } } else { if ( strtolower($keyword) == strtolower($word[$j]) ) { return true; } } } } return false; } if ( $localsearch == 1 ) { $fresult = 0; for ( $i=0; $i<count($files); $i++ ) { $result = search($files[$i], $keyword, $caps); if ( $result == true ) { $fresult = 1; echo "<p>Hakusana \"$keyword\" löydettiin tiedostosta <a href=\"$files[$i]\" target=\"new\">$files[$i]</a>.</p>\n"; } } if ( $fresult == 0 ) { echo "<p>Hakusana \"$keyword\" ei löytynyt mistään tiedostosta.</p>\n"; } } else { $result = search("http://$target", $keyword, $caps); if ( $result == true ) { echo "<p>Hakusana \"$keyword\" löydettiin osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n"; } else { echo "<p>Hakusana \"$keyword\" ei löytynyt osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n"; } } } ?>
Mitenkä tuon saa hakemaan $targetin tilalle automaattisesti tietokannassa (linkit.txt) olevat osoitteet, joista se etsii ettei käyttäjän tarvitse itse laittaa sitä osoitetta siihen?
Älä kysy sitä targettia, vaan määrittele se heti tuossa alussa.
no yhden $targetin osaan säätää tuohon, mutta en sitä, että jos linkit.txt -tiedostossa on vaikka 700 sivua niin kuinka se sitten käsittää kaikki ne linkit.
https://www.ohjelmointiputka.net/oppaat/opas.
http://wiki.mureakuha.com/wiki/
Siinä apuja :)
No juu.. eipä ollut apua...
Kyllä minä osaan sinne koodin sekaan tunkea tälläisen:
<?php //avataan tiedosto lukutilassa $tt = fopen("testi.txt", "r"); //nollataan rivinumerolaskuri $i = 0; //luetaan rivejä, kunnes tiedosto loppuu while (!feof($tt)) { //luetaan seuraava rivi muuttujaan $rivi = fgets($tt, 1024); //tulostetaan rivi rivinumeron kanssa echo "$i: $rivi"; //kasvatetaan laskuria $i++; } //suljetaan tiedosto fclose($tt); ?>
mutta kuinka minä saan tämän yhdistettyä toimimaan tuon toisen koodin kanssa, että se toimii? Jotain yritin tänään, mutta siitäkään ei tullut lasta eikä paskaa... lähinnä vain kasa virheitä.
Tuossa nyt koodi...
<?php //******************************************************* //paikallinen haku $localsearch = 0; //jos paikallinen haku on päällä, listaa tiedostot joista haetaan $files = array(); $files[] = "index.php"; $files[] = "muuta.php"; $files[] = "linkit.php"; $files[] = "palaute.php"; //******************************************************* $caps = $_GET['caps']; $keyword = $_GET['keyword']; $keyword = str_replace(" ", "", $keyword); $target = $_GET['target']; $target = str_replace("http://", "", $target); ?> <form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>"> Hakusana: <input type="text" name="keyword" size="24" value="<?php if ( $keyword != null ) { echo $keyword; } else { echo ""; } ?>" /> <?php if ( $localsearch == 0 ) { ?> <br />Kohde: <input type="text" name="target" size="35" value="<?php if ( $target != null ) { echo "http://$target"; } else { echo "http://"; } ?>" /> <?php } ?> <br />Sama kirjainkoko: <input type="checkbox" name="caps" value="yes" <?php if ( $caps == "yes" ) { echo "checked=\"checked\""; } ?> /> Kyllä <br /><input type="submit" name="submit" value="Hae" /> </form> <?php if ( $keyword != null ) { function search($target, $keyword, $caps) { $file = file("$target"); for ( $i=0; $i<count($file); $i++ ) { $file[$i] = str_replace("<", " <", $file[$i]); $file[$i] = str_replace(">", "> ", $file[$i]); $file[$i] = str_replace(".", " ", $file[$i]); $file[$i] = str_replace(",", " ", $file[$i]); $file[$i] = str_replace("\"", " ", $file[$i]); $file[$i] = str_replace("/", " ", $file[$i]); $file[$i] = str_replace("(", " ", $file[$i]); $file[$i] = str_replace(")", " ", $file[$i]); $file[$i] = str_replace("[", " ", $file[$i]); $file[$i] = str_replace("]", " ", $file[$i]); $file[$i] = str_replace("!", " ", $file[$i]); $file[$i] = str_replace("?", " ", $file[$i]); $file[$i] = str_replace("-", " ", $file[$i]); $data[$i] = preg_replace("/\r\n|\n\r|\n|\r/", "", $file[$i]); $word = explode(" ", $data[$i]); for ( $j=0; $j<count($word); $j++ ) { if ( $caps == "yes" ) { if ( $keyword == $word[$j] ) { return true; } } else { if ( strtolower($keyword) == strtolower($word[$j]) ) { return true; } } } } return false; } if ( $localsearch == 1 ) { $fresult = 0; for ( $i=0; $i<count($files); $i++ ) { $result = search($files[$i], $keyword, $caps); if ( $result == true ) { $fresult = 1; echo "<p>Hakusana \"$keyword\" löydettiin tiedostosta <a href=\"$files[$i]\" target=\"new\">$files[$i]</a>.</p>\n"; } } if ( $fresult == 0 ) { echo "<p>Hakusana \"$keyword\" ei löytynyt mistään tiedostosta.</p>\n"; } } else { //avataan tiedosto lukutilassa $tt = fopen("testi.txt", "r"); //nollataan rivinumerolaskuri $i = 0; //luetaan rivejä, kunnes tiedosto loppuu while (!feof($tt)) { //luetaan seuraava rivi muuttujaan $target = fgets($tt, 1024); //tulostetaan rivi rivinumeron kanssa $result = search("http://$target", $keyword, $caps); if ( $result == true ) { echo "<p>Hakusana \"$keyword\" löydettiin osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n"; } else { echo "<p>Hakusana \"$keyword\" ei löytynyt osoitteesta <a href=\"http://$target\" target=\"new\">http://$target</a>.</p>\n"; } } } //kasvatetaan laskuria $i++; } //suljetaan tiedosto fclose($tt); ?>
Kun sivun avaa niin se valittaa:
Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/jussi/search/beta/index.php on line 150
Kun hakee "test"-hakusanalla niin se sanoo:
Warning: file(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/jussi/search/beta/index.php on line 49 Warning: file(http://www.mbnet.fi ): failed to open stream: Success in /var/www/html/jussi/search/beta/index.php on line 49 Hakusana "test" ei löytynyt osoitteesta http://www.mbnet.fi . Warning: file(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /var/www/html/jussi/search/beta/index.php on line 49 Warning: file(http://www.suomi24.fi ): failed to open stream: Success in /var/www/html/jussi/search/beta/index.php on line 49 Hakusana "test" ei löytynyt osoitteesta http://www.suomi24.fi . Warning: file(http://): failed to open stream: Success in /var/www/html/jussi/search/beta/index.php on line 49 Hakusana "test" ei löytynyt osoitteesta http://.
Tarvitsisin apua...
PHP manuaali kirjoitti:
Reading ends when length - 1 bytes have been read, on a newline (which is included in the return value)..
Eli rtrimmiä kehiin kun olet lukenut rivin tiedostosta. Eikä ole tarpeen käyttää file("$target");, file($target); riittää.
juhaz kirjoitti:
Warning: fclose(): supplied argument is not a valid stream resource in /var/www/html/jussi/search/beta/index.php on line 150
Johtuu siitä, että fopen ei onnistunut, ja palautti täten falsen, mikä taas on boolean eikä resource, kuten fopen tahtoisi.
Ok. Nyt toimii muuten, mutta valittaa aina:
Warning: file(http://): failed to open stream: Success in /var/www/html/jussi/search/beta/index.php on line 49
Ei tuo kyllä olekkaan näköjään mikään hyvä koodi jos tietokannoista löytyy 800 sivua :/
Kestää nimittäin ihan saatanan kauan ladata sivua (siis, kun käyttäjä hakee jotain)...
Hidastahan se on hakea kahdeksansadan sivun sisällöt ja sitten etsiä niistä hakusanoja. En ihmettele jos file ei onnistu moiselle parametrille, debuggaile eli tulosta vaikka jokainen $target ja katso milloin se saa arvon "" (tyhjä rivi tiedostossa?).
Onkohan sitten mitään keinoa toteuttaa nopeaa hakua samalla tai siis samantyylisellä systeemillä?
Aihe on jo aika vanha, joten et voi enää vastata siihen.