Avatar billede jesper-moeller Nybegynder
11. juni 2006 - 19:52 Der er 32 kommentarer og
2 løsninger

læse log-filer lægge dem sammen og vise dem på en side

Jeg er total newbee i PHP så jeg håber nogen kan hjælpe mig med dette

Jeg har downloadet et lille hit-counter script, som funger fint. Men det mangler en mulighed som jeg har stor brugfor.
scriptet består af en counter.php fil der læser og lægger 1 til log-filen når folk besøger siden.
der er en logfil pr side som ligger i en folder der heder "logs" logfilerne er navngivet efter sidenavnet (feks side1.log , side2.log , side3.log osv.osv)

for at bruge counteren på siderne bruger jeg dette lille script
< SCRIPT TYP="text/javascript" SRC="
../counter/counter.php?page=SIDE1">< !--
//-->< /SCRIPT>
som får php filen til at læs logfilen side1.log  og lægge 1 til , og så viser det på siden

det jeg har brugfor er en måde at læse .log filerne på (uden at der bliver lagt hits til) og vise antallet af hits på feks side1 på en anden side.
og at kunne vise det samlede antal af hits på feks side2 og side3 . på side1 uden det tæller som hit

håber det er forståeligt ? og håber nogen kan hjælpe mig med det
Avatar billede loevgaard Praktikant
12. juni 2006 - 09:55 #1
Først skal du have et array, der indeholder alle de sider, hvor der tælles på:

<?php
$counterPages[0] = "side1.php";
$counterPages[1] = "side2.php";
$counterPages[2] = "side3.php";
?>

Efterfølgende skal hver af disse filer læses, og så vidt jeg har forstået står kun antallet af hits i log-filerne, derfor:

<?php
foreach($counterPages as $page) {
$data = file_get_contents($page);
$sum = $sum + $data;
}
echo $sum;
?>

Nu skulle den gerne udskrive antallet af hits på samtlige dine sider. Som du nok kan regne ud, så skal du bare tilføje de filer du vil have antal hits for i arrayet $counterPages.
Avatar billede jakobdo Ekspert
12. juni 2006 - 14:07 #2
Koden skal vel rettes fra:
$counterPages[0] = "side1.php";
til:
$counterPages[0] = "side1.log";

Men ellers bør l0vgaard fungere.
Avatar billede loevgaard Praktikant
12. juni 2006 - 14:54 #3
Ja, selvfølgelig, min fejl :) Man er bare vant til at skrive .php som endelse på alle filer :D
Avatar billede jesper-moeller Nybegynder
12. juni 2006 - 17:56 #4
Takker ... ptoblemt er bare at det aldrig er det samme antal sider der skal tælles...
feks kan det være
side1 + side3 + side4 den ene gang
side1 + side4 den anden gang
side1 + side2 + side3 den tredie gang

så scriptet skulle gerne kunne finde siderne (.log) selv avhængit af scriptet der spørger efter et resultat
< script type="text/javascript" src="../../../componenter/pagecount/counter.php?page=side1+side2"><!--
//-->
        </script>
eller
<script type="text/javascript">var all = side1+side2; document.write(all);</script>
eller noget  i den stil ?
Avatar billede jakobdo Ekspert
12. juni 2006 - 18:32 #5
Så kan du måske bruge denne kode:

<?php

$counterPages['side1'] = "side1.log";
$counterPages['side2'] = "side2.log";
$counterPages['side3'] = "side3.log";
$counterPages['side4'] = "side4.log";

$pages = explode("+", $_GET['page']);
foreach($pages as $page)
{
    $data = file_get_contents($counterPages[$page]);
    $sum = $sum + $data;
}
echo $sum;
?>
Avatar billede jesper-moeller Nybegynder
12. juni 2006 - 18:43 #6
Ok ...

Hvordan kalder jeg så den funktion så jeg får det ønskede resultat ???
Avatar billede jakobdo Ekspert
12. juni 2006 - 18:50 #7
Du gemmer f.eks. koden som counter.php

<?php

$counterPages['side1'] = "side1.log";
$counterPages['side2'] = "side2.log";
$counterPages['side3'] = "side3.log";
$counterPages['side4'] = "side4.log";

$pages = explode("+", $_GET['page']);
foreach($pages as $page)
{
    $data = file_get_contents($counterPages[$page]);
    $sum = $sum + $data;
}
echo $sum;
?>

og så kalder du: counter.php?page=side1+side2
Avatar billede jesper-moeller Nybegynder
12. juni 2006 - 19:02 #8
Prøver :-)
Avatar billede jesper-moeller Nybegynder
13. juni 2006 - 18:47 #9
Har detsvære ikke kunnet bruge nogle af jeres svar :-(

Har forsøgt at pille i nogle ligende scripts der ligner det jeg skal bruge. i et forsøg på at lave det, detsvære virker det ikke. jeg bliver ved at få en pcount undefined, måske i kan fortælle hvad der er galt ??

her er siden jeg tester det på http://www.jart.dk/jgom/test.html

og her er det script jeg selv har forsøgt at lave


echo "var pcount = new Array();\n";

// read logs folder directory contents
$dirHandle = opendir('./logs/');
while ($file = readdir($dirHandle)) {
if(!is_dir($file))
// set .log files id name
$id = $file
// read .log files contents
$logs = fopen($file,"r")
$hits = @fread($logs, filesize($file)) or $hits=0;
fclose($logs);
// Print out Javascript code
echo "pcount[$id]=$hits;\n";
}
closedir($dirHandle);

// Print out Javascript code
echo "
function pagecount_display(id)
{
document.write(pcount[id]);
}
";

exit();
Avatar billede loevgaard Praktikant
13. juni 2006 - 19:19 #10
display.php:
echo "pcount['$id']=$hits;\n";

test.html
The numbers is <span><script type="text/javascript">var all = pcount['centerpage1.log']+pcount['tutorials.log']; document.write(all);</script></span>
Avatar billede jesper-moeller Nybegynder
13. juni 2006 - 19:30 #11
Aha ... Små streger i luften ...*G* ... ak ja ....

Jamen det prøver jeg så :-)


( Ihh hvor bliver jeg klog )

Skal
document.write(pcount[id]);
så også have
document.write(pcount['id']);
????
Avatar billede loevgaard Praktikant
13. juni 2006 - 20:06 #12
Nej, fordi der får du parameteren fra funktionen, derfor er id i det tilfælde en variabel. Det er kun strenge, der skal i '' :)
Avatar billede jesper-moeller Nybegynder
13. juni 2006 - 20:38 #13
Takker  :-)

Vil straks prøve det af ....

Måske jeg skulle tage mig sammen og købe en bog om emnet istedet for bare at prøve ...*G*

"Education is learning what you didn't even know you didn't know!"
"True knowledge exists in knowing that you know nothing."
Avatar billede jesper-moeller Nybegynder
13. juni 2006 - 20:58 #14
Æv ... det hjalp ikke ... får stadigt "pcount is undefine" :-(
Avatar billede loevgaard Praktikant
14. juni 2006 - 00:24 #15
Ser lige på det i morgen, godnat :)
Avatar billede loevgaard Praktikant
14. juni 2006 - 09:29 #16
hmm, kan du ikke lave det hele i PHP? Fordi så kunne det gøres sådan her:

<?php
function pageCount($pageArray) {
foreach($pageArray as $page) {
$data = file_get_contents($page);
$sum = $sum + $data;
}
return $sum;
}
?>

Så kan du kalde den funktion således:

<?php
echo pageCount(array("side1.log", "side2.log", "side10.log"));
?>
Avatar billede jesper-moeller Nybegynder
14. juni 2006 - 10:38 #17
Orv... det ser smart ud...*S* ... det må prøves :-)

Som sagt så er jeg total newbei i php....
Den eneste grund til jeg har kastet mig ud i det er pga jeg ikke har kunnet finde en tæller til min side der opfylder mit behov...*S*

takker... jeg vil prøve den løsning ...
men skal jeg ikke på en eller anden måde fortælle den hvor daterne (logfilerne) ligger ???


;-)

Sikker på der NOK skal komme andre sjove problemer... men den tid den sorg...
Avatar billede loevgaard Praktikant
14. juni 2006 - 10:56 #18
Du kan enten gøre sådan her:
<?php
echo pageCount(array("./logs/side1.log", "./logs/side2.log", "./logs/side10.log"));
?>

eller sådan her:
<?php
function pageCount($pageArray) {
foreach($pageArray as $page) {
$data = file_get_contents("./logs/".$page);
$sum = $sum + $data;
}
return $sum;
}
?>
Avatar billede jakobdo Ekspert
14. juni 2006 - 18:31 #19
Som jeg forstod det ønskede jesper-moeller en dynamisk for sammentælling?
Jeg kan snart ikke følge med i denne tråd mere! :o)
Avatar billede loevgaard Praktikant
14. juni 2006 - 18:38 #20
Vil da også mene den er rimelig dynamisk min version :)
Avatar billede jakobdo Ekspert
14. juni 2006 - 18:42 #21
Jo, den kan udbygges.
Men på et tidspunkt snakkede jesper om: page=side1+side2
Men det var heller ikke sådan med l0vgaard.
Bare et hint til jesper om ham måske skulle være lidt mere præcis/specifik i hvad han ønsker! :o)
Avatar billede loevgaard Praktikant
14. juni 2006 - 18:57 #22
$pageArray = explode("+", $_GET['page']);

Så er den ordnet, hvis det er ;)

Men ja, mere præcision er i mange tilfælde godt :)
Avatar billede jakobdo Ekspert
14. juni 2006 - 20:10 #23
Apropos mit indlæg: 12/06-2006 18:50:07 :o)
Avatar billede jesper-moeller Nybegynder
14. juni 2006 - 20:54 #24
Takker l0vgaard for hans overbærenhed med mig ... :-)

Jeg har detsvære ikke haft tid enu til at teste dit forslag...(men det skal jeg nok få gjort)
Detsvære har jeg nu opdaget at der også er problemer med det script jeg har fundet, der skulle tælle hitsne , det virker ikke i NN/FF :-(


>>Bare et hint til jesper om ham måske skulle være lidt mere præcis/specifik i hvad han ønsker! :o)

Jeg troede egenligt det var rimligt tydeligt. men skal da gerne forsøge at uddybe det:
Det jeg er ude efter er 2 script (Hvor af jeg troede jeg havde fundet det ene :-/

Et der registrer når nogen går inde på en side.
der havde jeg fundet et der skrev en logfil for hver side man satte et lille script in på. det gjorde det ved at oprette en .log fil i en mappe der heder logs

det jeg så gerne ville var at kunne vise disse hits, (uden at det talte som hits)
og vise det samlede antal af hits for nogle bestemte sider feks
det samlede antal hits på page1 + page2 + page4 + page5
og
det samlede antal hits på page3 + page6 + page9
og
det samlede antal hits på page1 + page3 + page7 + page8

Jeg har ledt og ledt efter en sådan "counter" men har ikke detsvære kunne finde en der kan det
derfor har jeg forsøgt selv med php for første gang

håber det forklare hvad det er jeg vil/skal bruge ??
Avatar billede jakobdo Ekspert
14. juni 2006 - 20:58 #25
Måske det er at starte helt fra bunden, men hvorfor gemmer du ikke info i en database?
Så kan du nemt udtrække de specielle info du måtte ønske.
Avatar billede jesper-moeller Nybegynder
14. juni 2006 - 21:06 #26
>>> men hvorfor gemmer du ikke info i en database?

Jo.. det ville jo nok være smart nok...
Nu aner jeg blot enu mindre om dem en php :-)

Jeg har et andet script der (uden database) tæller downloads fra min side, og dem kan jeg lægge sammen på kryds og tværs, så tænkte at det var nærliggende at gøre det samme med hits ?
men det viste sig ikke at være så lige til :-(


>>> Måske det er at starte helt fra bunden

Den tanke har slået mig ;-)
Avatar billede loevgaard Praktikant
14. juni 2006 - 21:10 #27
Nu gennemgår jeg lige et helt eksempel.

side1.log:
34

side2.log:
560

functions.php:
<?php
function pageCount($pageArray) {
foreach($pageArray as $page) {
$data = file_get_contents($page);
$sum = $sum + $data;
}
return $sum;
}
?>

test.php:
<?php
require_once("functions.php");
echo pageCount(array("side1.log", "side2.log"));
?>

Nu kan du prøve at starte helt forfra og lave disse filer, så tror jeg du vil forstå logikken i det, ellers må du spørge igen :-)
Avatar billede jesper-moeller Nybegynder
14. juni 2006 - 21:21 #28
Takker :-)

"Logik er en systematisk metode til at komme frem til den forkerte løsning"

vil gøre mit beste...
(var selv lidt stolt af det jeg havde fået ud af at lure i andre script *S*)

Og tro mig ... skal nok vende frygteligt tilbage :-)
Avatar billede jakobdo Ekspert
14. juni 2006 - 21:23 #29
Bare rolig, det er vi slet ikke i tvivl om! :o)
Avatar billede jesper-moeller Nybegynder
14. juni 2006 - 21:23 #30
Nu har denne tråd også kørt længe og i har begge brugt tid og kræfter på mig ...
så mon ikke det er på tide at udele lidt point ? ...
hvis lige jakobdo også smider et svar så jeg kan fordele lidt mellem jer, så lukker jeg her og vender retur i en ny tråd.. når jeg har fået kigget og teste en del mere :-)
Avatar billede loevgaard Praktikant
14. juni 2006 - 21:34 #31
Du kan evt. skrive i den her tråd, så vi får en mail, når du opretter en ny tråd, så kan vi måske hjælpe dig lettere, fordi vi kender til dit problem. Håber du finder ud af det :)
Avatar billede jakobdo Ekspert
15. juni 2006 - 08:22 #32
Du får et svar! :o)
Avatar billede jesper-moeller Nybegynder
15. juni 2006 - 10:40 #33
Jeg har startet en ny tråd i http://www.eksperten.dk/spm/715565
Håber i har lyst til at følge med der :-)

Her er hvertfald point for hjælpen indtil nu ;-)
Avatar billede jakobdo Ekspert
15. juni 2006 - 10:56 #34
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester