Search

Gugu 16.02.05 22:13

Haku joka hakee joko otsikkotiedosta "title" tai lähdekoodista. Haku alkaa siitä kansiosta mihin koodi laitetaan ja käy kaikki alikansiot läpi.

 Tekstiversio  Arvo: -4 (4 ääntä)  Äänestä: +  -
Haku joka hakee joko otsikkotiedosta <title> tai lähdekoodista.
Haku alkaa siitä kansiosta mihin koodi laitetaan ja käy kaikki alikansiot läpi.
Koodi pohjautuu DJ-Dew:n pastettamaan php-haku koodin josta olen sitä vähän jatkokehitelly.
Tämä on minun ensimmäinen tänne laittamani koodi, joten älkää ihan lyttyyn haukkuko :) .
Varmasti usen kohdan ois voinu tehä järkevämminkin mutta....

<?php
//////////////////////////
//                           //
//    Gugu               //
//                          //
////////////////////////

$ab = 1;
$avaa = @opendir(".");
$kuva = @readdir($avaa);


while($kuva = @readdir($avaa)) {
                           
   if($kuva != "." && $kuva != "..") {
                 
      $paate = explode(".",$kuva);
      $paate = array_reverse($paate);
         
      if(!is_file ($kuva)){                           
         if($paate[1]==''){
                       
         $testi[$ab] = $kuva;
         $testi[$ab] = "$testi[$ab]/";
          $ab++;
       }       
                     
                   
   }}
}

////////////   Ensimmäiseten alikansioitten haku ////

$ccb = 1;
$aabis = $ab -1;
$bi = 1;
$lirppu = "";

alikansio($ccb, $aabis, $testi,$ab,$bi,$lirppu);


///////////  Loppujen alikansioitten haku /////////

for($dee=0; $dee<= $ab; $dee++){
   
   $tes = alikansio($ccb, $aabis, $testi,$ab,$bi,$lirppu);
   $ab    = $tes[0];
   $ccb   = $tes[1];
   $testi = $tes[2];
   
   $aabis = $ab -1;
   $bi = $ccb;
   $lirppu = " . ";
   
   $deepo = 0;
   
      alikansio($ccb, $aabis, $testi,$ab,$bi,$lirppu);
         
}


  //////  Kansioitten haku funktio  //////

function alikansio($ccb, $aabis, $testi, $ab,$bi,$lirppu){
   
   for($bi=$bi; $aabis>=$bi; $bi++){                  // Käydään kansiot läpi
     
      $tiuku = $testi[$bi];                        // otetaan kansion nimi
     
      if($lirppu ==''){   
         $tiuku = str_replace(".", "", $tiuku);
         $tiuku = str_replace("/", "", $tiuku);
           
      }
                           
      $avaa = @opendir("$tiuku");                    // avataan kansio
      $kuva = @readdir($avaa);
           
      while($kuva = @readdir($avaa)) {               // käydään kaikki tiedostot läpi
                                 
         if($kuva != "." && $kuva != "..") {          // Ei oteta tiedostolistauksessa . ja .. :ttä
                 
            $paate = explode(".",$kuva);
            $paate = array_reverse($paate);
                 
               if(!is_file ($kuva)){                       
                  if($paate[1]==''){
                                   
                  $testi[$ab] = $kuva;
                  $testi[$ab] = "$tiuku/$testi[$ab]/";
                  $testi[$ab] = str_replace("//", "/", $testi[$ab]);          // Korvataan tiedostopolussa //-merkit /-merkillä
                  $ab++;
                }       
          }}
         
      }
      $ccb++;
   }
   $retval[0]=$ab;
   $retval[1]=$ccb;
   $retval[2]=$testi;
   
   return $retval;           // Palautetaan arvot

}
////////////////// Kansion haku hommat loppuu /////////////////////////


if($_SERVER['QUERY_STRING'] == "hae") {
 
    $apu1 = 0;
    $apu2 = 0;
 
    $hak = "";             // Ensimmäinen hakemisto, josta etsitään
    $testi[0] = $hak;        // Luetaan se muuttujaan

    $q = $_POST['q'];       // Haeitaan hakukentän arvo muuttujaan q
   $q = strtolower($q);    // Muutetaan isot kirjaimet pieniksi

   for($gft=0; $ab>$gft; $gft++){            // Pyöritetään muuttujan $ab verran
           
      $filut = glob($testi[$gft]."*.*");
   
       if($filut != ''){                  // Jos kansiossa on tiedostoja, jatketaan if:n sisään
         
          foreach($filut as $tied) {
           
             if($_POST['tags'] <> "on"){
                  $filu = strip_tags(file_get_contents($tied));    //Poistetaan tagit ja luetaan muuttujaan
                  $filu = strtolower($filu);                  // Muutetaan isot kirjaimet pieniksi
             }
               else{
                  $filu = file_get_contents($tied);             //Luetaan koko muuttuja stingiin
                  $filu = strtolower($filu);                  // Muutetaan isot kirjaimet pieniksi
               }
                 
               $ttt = str_replace(array("\r\n","\n"),"",$filu);
                                               
               while(@strpos($ttt,stripslashes($q),(int)$i) !== false) {
               
                if(!@in_array('...'.str_replace($q,'<i>'.$q.'</i>',trim(addslashes(substr($ttt,@strpos($ttt,$q,(int)$i)-30,80)))).'...',$pätkät[$tied]))
                   $pätkät[$tied][] = '...'.str_replace($q,'<i>'.$q.'</i>',trim(addslashes(substr($ttt,@strpos($ttt,$q,(int)$i)-30,80)))).'...';
               
                   // trim($text, " \t."); poistaa muuttujasta \,t ja . -merkit
                   // addslashes = Lisää \ merkkejä stringiin '-eteen
                   // substr('ab', 0, 1); Monta merkkiä näytetään
                         
                if(!$ttmmpp) {
                   if(preg_match("/\<title\>(.*)\<\/title\>/",$ttt,$matches)){   // Löytyykö sana otsikkotekstistä
                       $otsikko = $matches[1];
                       $apu1 = 0;
                    }
                   else {
                    $otsikko = explode("/",$tied);                         // pätkitään / merkistä
                    $otsikko = end($otsikko);
                    $apu1 = 0;
                   }
                 
                   echo '<a href="'.$tied.'"><b>'.$otsikko.'</b></a><br \>';     // Tulostetaan hakutulokseen linkki
                   $ttmmpp = true;
                }
               
                $var = true;
                $i++;
            }
           
            if($var && is_array($pätkät[$tied])) {
               
                  foreach($pätkät[$tied] as $pätkä) {
                     
                   if ($apu1 != 0){     
                        $tarkistus = $pätkä;
                       
                     }
                     $apu1++;
                     
                     if ($tarkistus != $pätkä){                     // tarkistetaan että sisältö on muuttunu, estetään sama tulostus
                        $pätkä = strip_tags($pätkä);
                          $pätkä = htmlspecialchars($pätkä);
                          echo stripslashes($pätkä).'<br \><br \>';      // postetaan \ merkkejä tulostuksesta
                      }
                   }
            }
           
            unset($var);                        // Tyhjennetään muuttujat
            unset($i);
            unset($ttmmpp);
            unset($pätkät);
          }
       }
   }
   
   if ($pätkä == ''){                           // Hakutulos tyhjä
      echo 'Hakusanalla ei löytynyt mitään';
   }
 
}
else {                                       // Jos ei ole haku päällä näytetään hakulomake
 
echo '<form action="?hae" method="post">';
echo '<input type="text" name="q"><br \>Etsi lähdekoodista<input type="checkbox" name="tags"><br \>';
echo '<input type="submit">';
echo '</form>';
 
}

 ?>
 

editoitu: 01:13 17.2.05
Kryil 01:12 17.2.05 
Jaaha. Kuhassa näyttää olevan aukko. Kas kun ei ole vielä huomattu. Katsokaapa koodin kuvausta, ja sivun lähdekoodia samasta kohdasta.
Sama pätee koodikirjasto-sivun listaukseen.

Hyväksikäyttäjille tukkapöllyä!
Ztane 09:05 17.2.05 
kannattasko ihan silti kirjottaa <br />?
Akiro 10:31 17.2.05 
Kryil kirjoitti:
Jaaha. Kuhassa näyttää olevan aukko. Kas kun ei ole vielä huomattu. Katsokaapa koodin kuvausta, ja sivun lähdekoodia samasta kohdasta.
Sama pätee koodikirjasto-sivun listaukseen.

Hyväksikäyttäjille tukkapöllyä!
Mikä ihmeen aukko? htmlspecialchars jääny pois tuosta, mutta kerropa miten tuosta saa "aukon", eli pääset serverille tmv.
Irksome 11:27 17.2.05 
Joku fiksuhan vois heittää vaikka goatsen tuohon. Aukkohan se on sekin :)
editoitu: 14:23 17.2.05
Tuxe 12:14 17.2.05 
Jep. Mä pistin redirectin goat.cx:ään. Ja otin jo pois, älkää bannatko :P
editoitu: 15:08 17.2.05
T.M. 15:08 17.2.05 
Kumma kun tää sivu ei näy IE:llä lainkaan...
Juuh, näemmä voi tunkee HTML:ää kuvaukseen. Ettekö aio ollenkaan korjata moista "aloittelijan mokaa"?
webster 19:32 25.2.05 
Hyvinhän tuo tuntuu toimivan, mutta:

Suurin osa sivuistani on tekstitiedostoja ja osoite on esim. www.osoite.com/sivu.php?page=asia

Haku löytää toki kyseisen tekstitiedoston, mutta se näkyy siis vain tekstitiedostona eikä varsinaisena html-sivuna.
Auttaako mikään?