On Fri, 8 Feb 2013 18:40:17 +0100, "Kurt G" <
kurt...@guldbaek.net>
wrote:
>Jeg har kopieret Hjemmesideskolens besøgsstæller
>(
http://hjemmesideskolen.dk/scripts/count.php?id=cntphp) ind på et site.
>
>Den virker fint, så længe den kaldende side befinder sig i roden, da ligger
>filen "counter.txt" jo også i roden.
>Men kaldes det fra en fil, der ligger i et underbibliotek, kommer der
>kludder i det, da der opretttes en ny "counter.txt." i underbiblioteket.
>Denne bliver altid ved med at give 1 besøgende!
>
>Filen "taeller.php" indeholder en linie:
>function counter($updateOn='always', $filename='counter.txt') {
>
>For altid at pege på "counter.txt" i roden, har jeg prøvet at lave om til:
>function counter($updateOn='always',
>$filename=$_SERVER["DOCUMENT_ROOT"].'/counter.txt') {
>men det virker heller ikke.
>
>Ligeledes har jeg prøvet med / før counter.txt:
>function counter($updateOn='always', $filename='/counter.txt') {
Det hjælper ikke at ændre på default-værdien i funktionen, som du gør.
Du skal ændre i funktions-kaldet.
Men som jeg forstår funktionen ("model 1"), så er der både en fejl
(eller i det mindste en tvetydighed) i instruktionen, og den vil
skulle ændres for at fungere i under-biblioteker, hvis man tæller på
sessions.
Tvetydigheden:
Det er ikke nok at inkludere med:
<? include("taeller.php"); ?>
som der står.
(Bør vel i øvrigt rettes til <?php include("taeller.php"); ?>)
Det inkluderer kun funktionen, men kalder den aldrig.
Den bliver først kaldt med selve visningen:
<p>Besøg nr: <?php echo counter('always','counter.txt'); ?></p>
Hvis du vil have til at tælle "always" og vise resultatet på siden er
det fint nok.
Hvis du vil have den til at tælle "always" *uden* at vise resultatet,
skal du have:
<?php
include("taeller.php");
counter('always', 'counter.txt');
?>
Hvis du vil have den til at tælle "always" i under-biblioteker med
samme counter.txt (liggende i roden) og *uden* at vise resultatet,
skal du have følgende i filer i underbiblioteker:
<?php
include("../taeller.php");
counter('always', '../counter.txt');
?>
Hvis du vil ahve den til at tælle på "session" får du et problem i
underbiblioteker, fordi funktionen bruger $_SESSION[$filename] til at
indikere om der allerede er talt.
Det vil betyde, at hvis du kalder funktionen med
counter('session', '../counter.txt');
i "niveau 1"-under-biblioteker, men
counter('session', 'counter.txt');
i roden, så vil du få to separate session-variable:
$_SESSION['../counter.txt']
og
$_SESSION['counter.txt']
Og har du flere niveauer får du flere session-variable.
Det vil betyde, at du får en optælling for hvert niveau.
Altså: Hvis du både includerer og kører tælleren i roden, i "niveau
1"- og "niveau 2"-underbiblioteker, og en besøgende besøger alle 3
niveauer, så vil den tælle op 3 gange i stedet for 1 gang.
Men dette er kun et problem med "session"-tælling, og du vil skulle
skrive funktionen en smule om, fx så du har en separat
"path"-parameter:
counter('session', '../', 'counter.txt');
eller sætte en anden, fast værdi i stedet for
$_SESSION[$filename]
fx:
$_SESSION['mintaeller']
Hvis du bare vil tælle antal sidevisninger, skulle den køre ok.
Good luck,
Jørn
--
Jørn Andersen
http://socialister.dk
http://marxisme.dk