Uppgift till nån frivillig 2 ..

PHP

7 svar · 403 visningar · startad av Batboy

Medlem sedan jan. 20001 006 inlägg
Trådstart#1

Hej,

Hoppas nån har lust och tid att hjälpa mig.

Jag behöver ett PHP-script som tillverkar en html-fil. Jag har ett gäng textfiler ('id=1.dat','id=2.dat' osv. upp till ca. 'id=2000.dat'), innehållet i dessa textfiler ser t.ex. ut såhär:

76|5|3.6|213.114.241.135|212.151.439.105

Det viktiga i innehållet i dat-filerna är första siffran/siffrorna (76 ovan). Jag behöver en toplista där den dat-fil som innehåller högsta siffran står överst och sedan resten i fallande skala. Jag behöver även namnet på filen utan filtillägget (id=xxx) bredvid själva siffran.
Typ:

76 -> id=548
57 -> id=872
40 -> id=51
osv
osv

Allt detta ska alltså skrivas till en fil.

Ahh.. attans vad rörigt det blev, hoppas nån förstår vad jag menar. Behövs mer info så säg till..

Medlem sedan dec. 19996 721 inlägg
#2

Får man först fråga varför du har alla dessa filer? ;)

Medlem sedan jan. 20001 006 inlägg
#3

Visst får man det..

De tillhör ett betygsättnings-script (php). Man inkluderar ett php-script på den sida man vill ha betygsatt så genereras dessa filer automagiskt.
76 = Antal hits
5 = Antal röster
3.6 = Medelbetyg

Jag vill alltså ha en toplista på de sidor som genererar mest hits.

Ah.. svårt att förklara. Här kan det ses i action http://nokiatricks.com/logos/db/dl.php3?id=1292 i just detta fall är det själva logon som betygsätts men det är alltså hitsen som är det primära..

Medlem sedan dec. 19996 721 inlägg
#4

Okej, en databas eller en central fil hade känts mer smidigt, men du hade säkert en bra anledning till att göra så här.

Jag förutsätter att alla dat-filer ligger i samma mapp.


<?
$path="sökväg till mappen";
$dir=opendir($path);
while ($file = readdir($dir)) {
   if (substr ($file, -4)==".dat"){
      $id=substr($file,0,strlen($file)-4);

      $f=fopen("$path/$file","r");
      if ($f){
         $line=fgets($f,10);
         $arr=explode("|",$line);
         $count=(int) $arr[0];
         $list[$id]=$count;
         fclose($f);
      }
    }
}
arsort($list);

for (reset ($list); $key = key ($list); next ($list)) {
   echo $list[$key]." -> $key<BR>\n";
}    
closedir($dir);
?>

[Redigerat av emission den 11 jun 2000]

Medlem sedan jan. 20001 006 inlägg
#5

Tack!

Fungerar perfekt.

Visst vore en databas betydligt smidigare, mina kunskaper i PHP räcker dock inte till ännu. Det är inte jag som gjort detta betygsättnings-script..

Hrm.. du skulle inte ha lust att förklara varje del i ditt eminenta script, hur det fungerar alltså? Framför allt delen efter "while ($file = readdir($dir)) {" ;)

Medlem sedan dec. 19996 721 inlägg
#6

<?
$path="sökväg till mappen";
$dir=opendir($path);

//för varje $file i mappen

while ($file = readdir($dir)) {

// om de 4 sista i filnamnet är ".dat" så..
   if (substr ($file, -4)==".dat"){

//Sätt $id till namnet utan de 4 sista 

      $id=substr($file,0,strlen($file)-4);

//öppna filen och spara handtaget i $f

      $f=fopen("$path/$file","r");

//om filöppningen lyckades så...
      if ($f){

//lägg de 10 första tecknen i filen i $line
         $line=fgets($f,10);

//splitta upp $line till en array - $arr

         $arr=explode("|",$line);
//antalet hits lagras i $count, och kommer från det första elementet arr $arr

         $count=(int) $arr[0];

//lagra värdet i den associativa arrayen $list, men $id som nyckel

         $list[$id]=$count;
//stäng filen
         fclose($f);
      }
    }
}

//sortera arrayen omvänt

arsort($list);

//gå igenom den sorterade arrayen och skriv ut resultaten
for (reset ($list); $key = key ($list); next ($list)) {
   echo $list[$key]." -> $key<BR>\n";
}    
//stäng mappen
closedir($dir);
?>
Medlem sedan maj 20002 597 inlägg
#7

Grrrrrrr... du snodde mitt inläggsnamn.. grrrrrrrr... :)

Medlem sedan feb. 20001 270 inlägg
#8

Que!?

261 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)