Download Counter, ein php Script? |
Willkommen, Gast ( Anmelden | Registrierung )
Download Counter, ein php Script? |
22.07.2005 - 10:38
Beitrag
#1
|
|
Kommt Zeit, kommt Rat, kommt Conrad! 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 |
|
|
22.07.2005 - 12:47
Beitrag
#2
|
|
____________________ 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>"Linkcounter" 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>"Linkcounter" 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 |
|
|
22.07.2005 - 17:53
Beitrag
#3
|
|
Kommt Zeit, kommt Rat, kommt Conrad! Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 |
Danke sehr!
You made my day cu Conny |
|
|
22.07.2005 - 22:31
Beitrag
#4
|
|
Kommt Zeit, kommt Rat, kommt Conrad! 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 , 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 |
|
|
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. |
|
|
26.07.2005 - 7:56
Beitrag
#6
|
|
Kommt Zeit, kommt Rat, kommt Conrad! 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. 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 |
|
|
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. |
|
|
26.07.2005 - 15:05
Beitrag
#8
|
|
Kommt Zeit, kommt Rat, kommt Conrad! 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 |
|
|
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"); |
|
|
27.07.2005 - 20:02
Beitrag
#10
|
|
Kommt Zeit, kommt Rat, kommt Conrad! Gruppe: Mods Beiträge: 1.169 Mitglied seit: 21.11.2001 Wohnort: Altenkirchen, Westerwald Mitglieds-Nr.: 42 |
So, da bin ich wieder
Und ich glaube ich bekomme das Problem (wenn's denn überhaupt eins ist ) 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 (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! cu Conny |
|
|
Google Bot |
Beitrag
#
|
Google Ads |
|
|
|
Vereinfachte Darstellung | Aktuelles Datum: 23.04.2024 - 14:06 |