IPB

Willkommen, Gast ( Anmelden | Registrierung )

2 Seiten V   1 2 >  
Reply to this topicStart new topic
> Download Counter, ein php Script?
Conny
Beitrag 22.07.2005 - 10:38
Beitrag #1


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo,
immer wieder tauchen sie auf, auch bei uns hier im Forum,
DOWNLOAD COUNTER

Ich gehe mal davon aus. daß es ein PHP-Script ist.
Ich hätte aber gerne gewußt wie es geht!
Wird ein Logfile angelegt in der gezählt wird?
Wie wird der Download gezählt und sicher gestellt, daß es auch wirklich heruntergeladen und nicht abgebrochen wurde?

Beispielcode vielleicht?

Danke schon mal!

cu
Conny
Go to the top of the page
 
+Quote Post
Andreas
Beitrag 22.07.2005 - 12:47
Beitrag #2


____________________
Gruppensymbol

Gruppe: Admin
Beiträge: 1.220
Mitglied seit: 20.10.2001
Mitglieds-Nr.: 3



Ja, ist nur ein PHP-Script. Das Beispiel zählt zwar "nur" Links, aber ein Download ist ja auch ein Link. Kopf- und Fuss.html sind nur normale HTML Dateien, die den Rahmen der Seite bilden. Ansonsten hast Du schon Recht. Es wird nur eine Textdatei angelegt mit dem Link und dem Counter. Mehr ist das nicht.

QUELLTEXT
<?
//
// count - Hauptscript
// Version 1.0 vom 26.09.2002 - Autor: Andreas Edler (andreas@filmfacts.de)
//

include("vars.php");
$pwd = "";

// Einlesen des Linkkürzels (falls vorhanden!),
// Zähler erhöhen und weiterleiten

if (isset($HTTP_GET_VARS['name'])){
   $name = $HTTP_GET_VARS['name'];
   $countdatei=$name.".txt";

   // Schreiben der neuen Daten
     $fp = fopen("$countdatei","r");
     flock($fp,2);

     while($zeile = fgetcsv($fp,500)){
       $url=$zeile[0];
       $stand=$zeile[1];
     }
     flock($fp,3);
     fclose($fp);

     $fp = fopen("$countdatei","w");
     flock($fp,2);

     $stand++;
     $schreiben=$url.','.$stand;
     fputs($fp,$schreiben);

     flock($fp,3);
     fclose($fp);

     Header("Location: ".$url);
     exit();
}

// Einlesen der neuen Daten (falls vorhanden!)
// und auf Vollständigkeit prüfen ...
if (isset($HTTP_POST_VARS['nameneu'])){
   $nameneu = $HTTP_POST_VARS['nameneu'];
   $urlneu = $HTTP_POST_VARS['urlneu'];
   $standneu = $HTTP_POST_VARS['standneu'];
   $pwd = $HTTP_POST_VARS['pwd'];
   $countdatei=$nameneu.".txt";

   // Schreiben der neuen Daten falls
   // das Passwort OK ist
   if ($pwd == $passwort){
     $fp = fopen("$countdatei","w");
     flock($fp,2);

     $schreiben=$urlneu.','.$standneu;
     fputs($fp,$schreiben);

     flock($fp,3);
     fclose($fp);
     }

   Header("Location:".$basispfad);
   exit();
}


// Einlesen der Löschdaten (falls vorhanden!)
if (isset($HTTP_POST_VARS['loeschen'])){
   $loeschen = $HTTP_POST_VARS['loeschen'];
   $pwd = $HTTP_POST_VARS['pwd'];
   include($kopf);
   echo '<h3>&quot;Linkcounter&quot; Statistik für '.$adminname.'</h3>'."\n";

   if ($pwd != $passwort){
     echo '<p><b>'.$loeschen.'</b> wirklich löschen? Dann geben Sie bitte Ihr Passwort ein und bestätigen Sie!</p>';
     echo '<form action="index.php" method="post">';
     echo '<input type="Password" name="pwd" value="" size="10">';
     echo '<input type="hidden" name="loeschen" value="'.$loeschen.'">';
     echo '<input type="Submit" name="submit" value="Löschen!">';
     echo '</form>';
     }

   // Löschen der Counterdatei
   // falls das Passwort OK ist
   if ($pwd == $passwort){

     if(@unlink($loeschen)){
       echo "Die Datei <b>".$loeschen."</b> wurde gelöscht!";
       }else{
       echo "Konnte die Datei <b>".$loeschen."</b> nicht löschen!";
       }

     echo '<h4 align="center"><a href="'.$basispfad.'">Zurück</a></h4>';
     }

   include($fuss);
}


if (!isset($HTTP_GET_VARS['name'])){
 if (!isset($HTTP_POST_VARS['loeschen'])){
   include($kopf);

   echo '<h3>&quot;Linkcounter&quot; Statistik für '.$adminname.'</h3>'."\n";

   $url = $HTTP_GET_VARS['urlneu'];
   $name = $HTTP_GET_VARS['nameneu'];
   $stand = $HTTP_GET_VARS['standneu'];

   // Ausgabe des Formulars
   echo '<form action="index.php" method="post">'."\n";
   echo '<table align="center">'."\n";
   echo '<tr><td valign="top" align="right">neue URL:</td><td align="left"><input type="Text" name="urlneu" value="'.$url.'" size="40"></td><td valign="top" align="right">Stand:</td><td><input type="Text" name="standneu" value="'.$stand.'" size="10" maxlength=""></td></tr>'."\n";
   echo '<tr><td valign="top" align="right">Kürzel:</td><td align="left"><input type="Text" name="nameneu" value="'.$name.'" size="40"></td><td valign="top" align="right">Passwort:</td><td align="left"><input type="Password" name="pwd" value="" size="10"></td></tr>'."\n";
   echo '<tr><td valign="top" align="center" colspan="5"><input type="Submit" name="eintragen" value="eintragen"></td></tr>'."\n";
   echo '</table>'."\n";
   echo '</form>'."\n";


   // Einlesen des Verzeichnisses und Verwerfen
   // der nicht passenden Dateien
   $verz=opendir ('.');
   $x=0;
   while ($file = readdir($verz)){
     if($file != "." && $file != ".." && substr($file, -4) == ".txt"){
        $speicher[$x] = $file;
        $x++;
        }
     }
   closedir($verz);

   // Ausgabe der angelegten Counter mit den Counterständen
   // in einer Tabelle
   echo'<form action="index.php" method="post">'."\n";

   echo '<table cellspacing="1" cellpadding="0" width="100%">'."\n";
   echo '<tr><th valign="top">URL</th><th valign="top">Zähler</th><th valign="top">Datei</th><th><input type="Submit" name="x" value="x"></th></tr>'."\n";
   $x=0;
   asort($speicher);
   while ($speicher[$x]){
     $fp = fopen("$speicher[$x]","r");
     flock($fp,2);

     while($zeile = fgetcsv($fp,500)){
       $url=$zeile[0];
       $stand=$zeile[1];
     }

     echo '<tr><td valign="top"><a href="'.$url.'" target="_top">'.$url.'</a></td><td valign="top" align="right">'.$stand.'</td><td valign="top" align="right"><a href="index.php?nameneu='.substr($speicher[$x],0,strlen($speicher[$x])-4).'&urlneu='.$url.'&standneu='.$stand.'">'.$speicher[$x].'</a></td><td valign="middle"><input type="Radio" name="loeschen" value="'.$speicher[$x].'"></td></tr>'."\n";
     flock($fp,3);
     fclose($fp);


     $x++;
   }
   echo "</table>\n";
   echo "</form>\n";

   include($fuss);
 }
}
?>


vars.php
QUELLTEXT
<?
// Version 1.0 vom 26.09.2002 - Autor: Andreas Edler (andreas@filmfacts.de)
//
// Hier werden grundsätzliche Variablen abgelegt,
// die das Aussehen beinflussen!
// Die Variablennamen sollten selbsterklärend sein.


$basispfad = "http://www.andreas-edler.de/blafasel/index.php";
$kopf = "kopf.html";
$fuss = "fuss.html";
$passwort = "...";
$adminmail = "...";
$adminname = "...";
$mailsubject = "...";

?>


Hab' ich jetzt nur schnell per WebFTP kopiert. Ich benutze das nicht mehr aktiv ... aber es lief immer.

Grüße

Andreas
Go to the top of the page
 
+Quote Post
Conny
Beitrag 22.07.2005 - 17:53
Beitrag #3


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Danke sehr!

You made my day biggrin.gif

cu
Conny
Go to the top of the page
 
+Quote Post
Conny
Beitrag 22.07.2005 - 22:31
Beitrag #4


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Also, ich habe ein Wenig herumprobiert und Dank Andreas seine Vorlage icon13.gif , ist folgendes dabei heraus gekommen:
Testseite

Die entscheidende Code dieser Seite:
QUELLTEXT
<TR>
 <TD><A HREF="counter/download/download-1-count.php?URL=../../download/nenform-c.pdf">Download</A></TD>
<TD>Nenform-c.pdf</TD>
<TD ALIGN="right"><?php
include('counter/download/download-01.log');
?> </TD>
</TR>


Die Code der download-1-count.php:
QUELLTEXT
<?php
// pfad zum counter
$p_counter='download-01.log';
// REM: nicht vorhandene log-Dateien zuerst erstellen und auf chmod 777 stellen !
// Daten einlesen
$temp=file($p_counter); $counter=$temp[0];
 {
  $counter++;
  $fh=fopen($p_counter, 'w');
    fwrite($fh, $counter);
  fclose($fh);
 }
// Downloadfile aufrufen
Header("Location:".$_GET['URL']);
exit();
?>


Beim anklicken des Linkes wird also zunächst durch die Datei download-1-count.php der Counter um eins erhöht bevor der eigentliche Download angeboten wird. Das funktioniert so weit auch ganz gut.
Nachteil: die erhöhung des Counters wird erst nach einem Reload der Seite sichtbar und wenn der Download zwar angeklickt, dann aber doch nicht durchgeführt wird, geht der Counter trotzdem ein hoch...

Any suggestions?

cu
Conny
Go to the top of the page
 
+Quote Post
db
Beitrag 26.07.2005 - 0:37
Beitrag #5


hdb
*****

Gruppe: User
Beiträge: 685
Mitglied seit: 26.10.2001
Wohnort: Köln
Mitglieds-Nr.: 5



...
Header("Location:".$_GET['URL']);
flush;
header("Refresh: 5; URL=$PHP_SELF");
exit;

Mal versuchen, ich hab's nicht getestet.
Go to the top of the page
 
+Quote Post
Conny
Beitrag 26.07.2005 - 7:56
Beitrag #6


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo Dieter!

Was machen die Bandscheiben?
Bist Du soweit wieder fit?

Danke für diesen Tipp, ich habe es getestet, leider ohne Erfolg. sad.gif
Es bleibt wie es ist, nach erfolgtem Download, zeigt der Counter diesen erst nach einem (manuellen) refresh der Seite an.
Der angestrebte automatisierte Refesh klappt (zumindest in dieser Form) nicht.

cu
Conny
Go to the top of the page
 
+Quote Post
db
Beitrag 26.07.2005 - 8:06
Beitrag #7


hdb
*****

Gruppe: User
Beiträge: 685
Mitglied seit: 26.10.2001
Wohnort: Köln
Mitglieds-Nr.: 5



Dann eben 2pass

QUELLTEXT
<?
$hits = file("mycounter.log");
$hits = $hits[0] + 1;
$fa = fopen ("mycounter.log", "w");
if (flock($fa, LOCK_EX)) {
    @fputs($fa, $hits);
    flock($fa, LOCK_UN);
}
fclose($fa);

if (($_GET['go'] === 1) && (isset($_GET['url']))) {
    header("Location: ".$_GET('url') );
    } else {
    header("Location: ".$PHP_SELF."?do=1&url=".$_GET('url') );
}
exit;
?>


Sorry, geht natürlich nicht. Ich sehe gerade Dein Counter ist ein Include.
Go to the top of the page
 
+Quote Post
Conny
Beitrag 26.07.2005 - 15:05
Beitrag #8


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



Hallo Dieter,
Klappt noch nicht ganz.
Beim Klick auf dem download Link gibt es folgende Fehlermeldung:
Fatal error: Function name must be a string in E:\Apache\xampplite\htdocs\web\Webseite\counter\download\download-1-count.php on line 14

Line 14 ist die Zeile:
Header("Location: ".$PHP_SELF."?do=1&url=".$_GET('URL'));

Der Counter geht, also in der Log-Datei wird geschrieben und eins drauf gezahlt; es wird nur (noch) nicht ausgegeben (es wird ja die Fehlermeldung gezeigt).

cu
Conny
Go to the top of the page
 
+Quote Post
db
Beitrag 26.07.2005 - 22:32
Beitrag #9


hdb
*****

Gruppe: User
Beiträge: 685
Mitglied seit: 26.10.2001
Wohnort: Köln
Mitglieds-Nr.: 5



ZITAT(Conny @ 26.07.2005 - 16:05)
Hallo Dieter,
Klappt noch nicht ganz.
Beim Klick auf dem download Link gibt es folgende Fehlermeldung:
Fatal error: Function name must be a string in E:\Apache\xampplite\htdocs\web\Webseite\counter\download\download-1-count.php on line 14

Line 14 ist die Zeile:
Header("Location: ".$PHP_SELF."?do=1&url=".$_GET('URL'));

Der Counter geht, also in der Log-Datei wird geschrieben und eins drauf gezahlt; es wird nur (noch) nicht ausgegeben (es wird ja die Fehlermeldung gezeigt).

cu
Conny
*


$location = $PHP_SELF."?do=1&url=".$_GET['url'];

header("Location : $location");
Go to the top of the page
 
+Quote Post
Conny
Beitrag 27.07.2005 - 20:02
Beitrag #10


Kommt Zeit, kommt Rat, kommt Conrad!
Gruppensymbol

Gruppe: Mods
Beiträge: 1.169
Mitglied seit: 21.11.2001
Wohnort: Altenkirchen, Westerwald
Mitglieds-Nr.: 42



So, da bin ich wieder biggrin.gif
Und ich glaube ich bekomme das Problem (wenn's denn überhaupt eins ist wink.gif ) allmählich in den Griff.

Solange nur nach der Datei gefragt wird, Header("Location:".$_GET['URL']);, lief alles Fehlerfrei, allerdings ohne daß der Counter sofort den ausgeführten Download angezeigt hat.
Der Versuch mit dem Download mittels PHP gleichzeitig einen Reload der Seite zu bewirken (denn das wurde sofort den korrekten Counterstand mit sich bringen), habe ich trotz Dieters ausführliche Hilfestellung (Danke Dieter!) leider nicht hinbekommen smilywand.gif (zu Blöd, oder einfach zu wenig Ahnung von PHP).
Die Codezeile $location = $PHP_SELF."?do=1&url=".$_GET['url']; (und weitere) brachte zwar keine Fehlermeldung, aber den Versuch die Counter.log zu laden (warum auch immer).

Am Ende habe ich die Lösung ausserhalb von PHP gefunden, mit good old JavaScript!

In der log-PHP die Zeile: Header("Location:".$_GET['URL']);
Und auf der Downloadseite im Link: <A HREF="Bla-bla" OnBlur="java script:location.reload()"> . . </A>

Ich glaube damit habe ich es geschafft! biggrin.gif

cu
Conny
Go to the top of the page
 
+Quote Post
Google Bot
Beitrag
Beitrag #


Google Ads









Go to the top of the page
 
Quote Post

2 Seiten V   1 2 >
Reply to this topicStart new topic
1 Besucher lesen dieses Thema (Gäste: 1 | Anonyme Besucher: 0)
0 Mitglieder:

 



RSS Vereinfachte Darstellung Aktuelles Datum: 23.04.2024 - 14:06

taschenkalender
expertise-panel IPS Driver Error

IPS Driver Error

There appears to be an error with the database.
You can try to refresh the page by clicking here