Avatar billede pennypacker Nybegynder
17. august 2003 - 01:10 Der er 37 kommentarer og
1 løsning

Simpel download tæller

Hej jeg søger et simpelt script der kan tæller hvor mange gange der er blevet trykket på et link. Altså hver gang man trykker på linket så gemmer den det i en text fil og så skal den kunne sige hvor mange gange der er blevet trykket på linket

Hjælp søges mvh. Pennypacker
Avatar billede pennypacker Nybegynder
17. august 2003 - 02:00 #2
Ok den må gerne ligne lidt den sidste bare være sådan at alle downloads bliver gemt i en text fil
Avatar billede krydset Nybegynder
17. august 2003 - 02:55 #3
kan ikke finde nogen med text kun mysql
Avatar billede detox Nybegynder
17. august 2003 - 09:44 #4
Her er et simpelt script:

<?
$fil = 'links.txt';
$row = 1;
$handle = fopen ($fil,"r");
while ($data = fgetcsv ($handle, 500, ";")) {
    $link[$row] = $data[0];
    $hit[$row] = $data[1];
    $row++;
}
fclose ($handle);

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $hit[$id]++;
    $str = "";
    for ($i=1;$i<$row;$i++) {
        $str .= $link[$i] . ";" . $hit[$i] . "\r\n";
    }
    $handle = fopen ($fil,"w");
    fputs ($handle, $str, strlen($str));
    fclose ($handle);
    $URL = "http://" . $link[$id];
    header('Location: '.$URL);
}else{
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");

    echo "<table>";
    for ($i=1;$i<$row;$i++) {
        echo "<tr><td><a href=\"" .$_SERVER['PHP_SELF'] . "?id=" . $i . "\">" . $link[$i] . "</a></td><td> Hits: " . $hit[$i] . "</td></tr>";
    }
    echo "</table>";
}
?>

links.txt:
----------

www.ekperten.dk;2
www.google.com;4
dk2.php.net/manual/en;3

PS: Der er brugt en del headers, for at sikre at Hit's bliver opdateret ved brug af 'Tilbage-knappen'
Avatar billede pennypacker Nybegynder
17. august 2003 - 10:54 #5
Kan du ikke lave det sådan at f.eks. at man har 100 downloads også står der bare et sted på siden: downloads ialt 56
Avatar billede detox Nybegynder
17. august 2003 - 14:04 #6
Ikke forstået. Vil du ha' tilføjet en 'ialt' for alle link's?
Avatar billede pennypacker Nybegynder
17. august 2003 - 14:07 #7
prøv at se dette http://www.thomaslunde.dk

kik på statestik ude til venstre der står downloads. Sådan skal scriptet være at den viser alle downloads et sted
Avatar billede detox Nybegynder
17. august 2003 - 14:18 #8
Nu ved jeg ikke om jeg er helt med, hvis du ændrer de sidste linier, får du en der viser ialt.

echo "<table>";
    for ($i=1;$i<$row;$i++) {
        echo "<tr><td><a href=\"" .$_SERVER['PHP_SELF'] . "?id=" . $i . "\">" . $link[$i] . "</a></td><td> Hits: " . $hit[$i] . "</td></tr>";
    }
    echo "</table><br />";
    echo "Downloads: " . array_sum($hit);
}
Avatar billede pennypacker Nybegynder
17. august 2003 - 14:24 #9
Ja lidt sådan det behøver bare ikke at vise hvor mange kliks linksne har og kan man ikke lave det sådan at man ikke behøver at skrive addressen til linket men med f.eks. <a href="download.zip">download</a>
Avatar billede detox Nybegynder
17. august 2003 - 14:32 #10
Jo, det kan man sagtens. Jeg troede bare det var online links.
Ser lige på det.
Avatar billede detox Nybegynder
17. august 2003 - 14:45 #11
Så håber jeg, det er sådan her du mener:

<?
$fil = 'links.txt';
$row = 1;
$handle = fopen ($fil,"r");
while ($data = fgetcsv ($handle, 500, ";")) {
    $link[$row] = $data[0];
    $hit[$row] = $data[1];
    $row++;
}
fclose ($handle);

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $hit[$id]++;
    $str = "";
    for ($i=1;$i<$row;$i++) {
        $str .= $link[$i] . ";" . $hit[$i] . "\r\n";
    }
    $handle = fopen ($fil,"w");
    fputs ($handle, $str, strlen($str));
    fclose ($handle);
    $URL = "img/" . $link[$id];
    header('Location: '.$URL);
}else{
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");

    echo "<table>";
    for ($i=1;$i<$row;$i++) {
        $arr = explode(".", $link[$i]);
        array_pop($arr);
        $adr = implode(".", $arr);
        echo "<tr><td><a href=\"" .$_SERVER['PHP_SELF'] . "?id=" . $i . "\">" . $adr . "</a></td></tr>";
    }
    echo "</table><br />";
    echo "Downloads: " . array_sum($hit);
}
?>
Avatar billede detox Nybegynder
17. august 2003 - 14:46 #12
Så, skal du lige rette $URL til din download-mappe.
Avatar billede pennypacker Nybegynder
17. august 2003 - 14:53 #13
Ja sådan men kan du ikke lave det sådan at man ikke skal skrive addressen men at den linker direkte til zip filen
Avatar billede detox Nybegynder
17. august 2003 - 14:59 #14
Den er jeg ikke helt med på, skriver du ikke bare zip filernes navn links-filen og så virker det?
Avatar billede detox Nybegynder
17. august 2003 - 15:05 #15
Nåh, du vil have det så den selv lister links til zip-filerne i din mappe og så blot gemmer antal download i din links-fil?
Avatar billede detox Nybegynder
17. august 2003 - 15:33 #16
Prøv sådan her i stedet:

<?
$sti = 'img/'; //Sti til zip-filer
$fil = 'links.txt';

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $hits = file_get_contents($fil);
    $hits++;
    $handle = fopen ($fil,"w");
    fputs ($handle, $hits, strlen($hits));
    fclose ($handle);
    $URL = $sti . $id;
    header('Location: '.$URL);
}else{
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
$zips = Vis($sti);
for ($i=0;$i<count($zips);$i++) {
    $arr = explode(".", $zips[$i]);
    array_pop($arr);
    $adr = implode(".", $arr);
    echo "<a href=\"" .$_SERVER['PHP_SELF'] . "?id=" . $zips[$i] . "\">" . $adr . "</a><br />";
}
$hits = file_get_contents($fil);
echo "<br />Downloads: " . $hits;
}
//Hjælpefunktion list zip-filer
function Vis($dir) {
    if ($dh = opendir($dir)) {
        while (false !== ($file = readdir($dh))) {
            if (substr($file,-4) == ".zip") {
                $filer[] = $file;
            }
        }
        closedir($dh);
        return $filer;
    } else {
    return false;
}
}
?>
Avatar billede pennypacker Nybegynder
17. august 2003 - 22:41 #17
Jeg kan ikke få det til at virke ordenligt men her er dine points som tak for din hjælp
Avatar billede detox Nybegynder
18. august 2003 - 09:00 #18
Ok, tak for point. Men sig mig, hvad er det der driller?
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:21 #19
Jeg havde bare tænkt mig at linksne ikke skulle være i text filen men i scriptet også text filen bare indeholdt informationen om kliksne
Avatar billede detox Nybegynder
18. august 2003 - 13:25 #20
Det er jo netop sådan mit sidste indlæg fungerer. Sæt et 0 i filen som start og så tæller den op derfra.
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:29 #21
nå ok men hvad så hvis man skal linke til en fil?
Avatar billede detox Nybegynder
18. august 2003 - 13:33 #22
I de to første linier skriver du stien til en mappe med zip filer og sti/navn på filen der skal opbevare antal hit's.
Avatar billede detox Nybegynder
18. august 2003 - 13:36 #23
Nu har jeg forstået det sådan at det kun er zip-filer du har til download, ellers må du rette mig.
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:36 #24
ja det er kun zip
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:37 #25
det virker men den skriver dette her:

Warning: Cannot modify header information - headers already sent by (output started at /home/web/web1899/sim/index.php:1) in /home/web/web1899/sim/index.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at /home/web/web1899/sim/index.php:1) in /home/web/web1899/sim/index.php on line 16

Warning: Cannot modify header information - headers already sent by (output started at /home/web/web1899/sim/index.php:1) in /home/web/web1899/sim/index.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at /home/web/web1899/sim/index.php:1) in /home/web/web1899/sim/index.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home/web/web1899/sim/index.php:1) in /home/web/web1899/sim/index.php on line 19
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:38 #26
også tæller den 1 klik for 2
Avatar billede detox Nybegynder
18. august 2003 - 13:38 #27
Det ser ud til at du sender en header i starten af dit script.
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:39 #28
hvad vil det sige?
Avatar billede detox Nybegynder
18. august 2003 - 13:43 #29
Hvordan ser dine allerførste linier i filen ud?
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:44 #30
sådan her ser hele filen ud:

<a href="http://www.web-ting.dk/sim/img/hh.zip">hh</a><?
$sti = 'img/'; //Sti til zip-filer
$fil = 'links.txt';

if (isset($_GET['id'])) {
    $id = $_GET['id'];
    $hits = file_get_contents($fil);
    $hits++;
    $handle = fopen ($fil,"w");
    fputs ($handle, $hits, strlen($hits));
    fclose ($handle);
    $URL = $sti . $id;
    header('Location: '.$URL);
}else{
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
$zips = Vis($sti);
for ($i=0;$i<count($zips);$i++) {
    $arr = explode(".", $zips[$i]);
    array_pop($arr);
    $adr = implode(".", $arr);
    echo "<a href=\"" .$_SERVER['PHP_SELF'] . "?id=" . $zips[$i] . "\">" . $adr . "</a><br />";
}
$hits = file_get_contents($fil);
echo "<br />Downloads: " . $hits;
}
//Hjælpefunktion list zip-filer
function Vis($dir) {
    if ($dh = opendir($dir)) {
        while (false !== ($file = readdir($dh))) {
            if (substr($file,-4) == ".zip") {
                $filer[] = $file;
            }
        }
        closedir($dh);
        return $filer;
    } else {
    return false;
}
}
?>
Avatar billede detox Nybegynder
18. august 2003 - 13:54 #31
Prøv at fjerne:

<a href="http://www.web-ting.dk/sim/img/hh.zip">hh</a>

og lav en relativ sti til mappen her i stedet (hvor jeg som eks. har 'img/':
$sti = 'img/'; //Sti til zip-filer **********
$fil = 'links.txt';
Avatar billede detox Nybegynder
18. august 2003 - 13:55 #32
Men jeg forstår ikke at den kan tælle dobbelt?
Avatar billede pennypacker Nybegynder
18. august 2003 - 13:57 #33
Det forstår jeg ikke?
Avatar billede detox Nybegynder
18. august 2003 - 14:03 #34
Er det ikke samme server du kører siden fra, hvor du har denne: '/sim/img/hh.zip' liggende?
Så kunne du prøve med:

<?
$sti = 'sim/img/'; //Sti til zip-filer
$fil = 'links.txt';
Avatar billede pennypacker Nybegynder
18. august 2003 - 14:07 #35
nu skriver den dette:

Warning: opendir() [function.opendir]: SAFE MODE Restriction in effect. The script whose uid is 80 is not allowed to access sim owned by uid 0 in /home/web/web1899/sim/index.php on line 32

Warning: opendir(sim/img/) [function.opendir]: failed to open dir: No such file or directory in /home/web/web1899/sim/index.php on line 32
Avatar billede detox Nybegynder
18. august 2003 - 14:09 #36
Ok, du er i mappen 'sim', så skal der stå:

<?
$sti = 'img/'; //Sti til zip-filer
$fil = 'links.txt';
Avatar billede pennypacker Nybegynder
18. august 2003 - 14:12 #37
SÅ VIRKER DET !!!!!!!

Mange mange tak for din hjælp !!
Avatar billede detox Nybegynder
18. august 2003 - 14:13 #38
Velbekommen c",)
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