Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: voisiko joku auttaa?

Sivun loppuun

juhaz [03.11.2005 10:23:24]

#

<?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?

squid [03.11.2005 13:24:51]

#

Älä kysy sitä targettia, vaan määrittele se heti tuossa alussa.

juhaz [03.11.2005 14:32:49]

#

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.

pwc [03.11.2005 16:18:53]

#

https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=phpj5
http://wiki.mureakuha.com/wiki/PHP_ja_tiedostojen_käsittely

Siinä apuja :)

juhaz [03.11.2005 17:18:48]

#

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ä.

juhaz [04.11.2005 08:57:58]

#

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...

tsuriga [04.11.2005 14:40:48]

#

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.

juhaz [04.11.2005 17:59:37]

#

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

juhaz [04.11.2005 18:39:02]

#

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)...

tsuriga [04.11.2005 19:07:48]

#

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?).

juhaz [04.11.2005 19:22:55]

#

Onkohan sitten mitään keinoa toteuttaa nopeaa hakua samalla tai siis samantyylisellä systeemillä?


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta