Alla oleva skriptin pitäisi hakea kansiosta (ja alakansiosta) kaikki .txt päätteiset tiedostot. Mutta se ei toimi. Osaisiko joku guru neuvoa vähän?
<?php // Alustukset $results = array (); $output = ""; $search = array ("sana1", "testisana"); // Hakusanat // Lue kansio Testi ja tämän alikansiot $results = readDirectory ("Testi"); // Järjestä tulokset ja muodosta tulostusstringi ksort ($results); reset ($results); while (list ($k, $v) = each ($results)) for ($i = 0, $j = count ($search); $i < $j; ++$i) if (strstr ($v, $search[$i])) $output .= str_replace (".txt<", "", "<a href=\"$k\">$k</a><br>\n"); // Tulostetaan hakutulokset echo $output; // Lukee kansioista ja alikansioista .txt tiedostot function readDirectory ($path) { global $results; $dir = opendir ($path); while ($item = readdir ($dir)) if (strstr ($item, ".txt")) $results["$path/$item"] = join ("", file ("$path/$item")); else if (is_dir ("$path/$item")) readDirectory ("$path/$item"); closedir ($dir);
oho, unohin laittaa ne koodi tagiin :)
Ja laitoit väärään paikkaan.
Väärä paikka ja suoraan sanoen paska kysymys. Jos te, hyvät ihmiset, haluatte että teitä autetaan niin kertokaa nyt ihmeessä mikä siinä _täsmälleen_ ei toimi.
Tässä on mureakuhan koodista väännetty purkka:
<?php if(!empty($HTTP_GET_VARS['dir'])) { $dir=$HTTP_SERVER_VARS['DOCUMENT_ROOT'].'/'.$HTTP_GET_VARS['dir']; $d=&$HTTP_GET_VARS['dir']; } else { $dir='.'; $d='.'; } clearstatcache(); if($a=@opendir($dir)) { while($b=readdir($a)) { if(ereg("^\\.",$b)) continue; if(ereg(".txt", $b)) { echo (is_dir($b))?"<li> <a href=?dir=$d/$b>$b</a>":"<li> <a href=$d/$b>$b</a>"; } } closedir($a); } else { echo 'Kansioon ei oikeutta'; } ?>
Veltto, sen piti olla haku eli searchi. ei tommonen.
En minä tiedä mikä siinä on vikana, kun se ei ole minun tekemäni!
Kysyinkin _miten_ se ei toimi? Virheilmoituksia? Mitä tapahtuu? Mitä jää tapahtumatta?
ahaa, luin ton ekan viestis vähän huolimattomasti
Ja Antille: Voisiko rivitystä viilata vähän?
kertokaa vaan jos tulee ideota miten korjta se kun oon itte iha nyypi
Tuossa skriptissäsi on näemmä rekursiivinen eli itseään kutsuva aliohjelma. Jonkin bugin seurauksena se sitten kutsuu itseään loputtomiin tai ainakin liian monta kertaa, jolloin avattavien hakemistojen maksimimäärä ylittyy.
Tein nyt vielä huvikseni toimivan ja puolta lyhyemmän version tuosta skriptistäsi. Skripti tulostaa kaikki sen hakemiston ja alihakemistojen .txt-tiedostot.
<?php lh(".",".txt"); function lh($hak,$p) { $h=opendir($hak); while ($t=readdir($h)) { if (substr($t,-4)==$p){echo "$hak/$t<br>";} if (is_dir("$hak/$t") && $t<>"." && $t<>".."){lh("$hak/$t",$p);} } } ?>
Danke
äärhh!
eihän tuo ollukkaan se mitä haeskelin.
Miten saisin semmosen "search" jututn joka ettisi sen tietyn .txt tiedoston??
Nopeastihan tuosta "search" jutun tekee, kun tarkistaa vaikka substr_count:illa löytyykö haettua nimeä kustakin löydetystä tiedostosta.
Suosittelen, että opettelet itse jonkin verran PHP-ohjelmoinnin perusteita, sillä jos kaikki skriptit pitää etsiä jostain valmiina täsmälleen oikeamuotoisina, siinä menee pidemmällä tähtäimellä enemmän aikaa kuin PHP-ohjelmoinnin opettelemiseen.
Tästä saat pienen hakukoneen, josta voit väsätä isomman:
Pekka haluaa sitten väkisin bannit/tjsp. ? :P
Ööööö, Mikko? T? Missä sinun rohviilisi on?
Tulee sitten joskus...
Aihe on jo aika vanha, joten et voi enää vastata siihen.