![]() |
[PHP] Download-Counter
Hi ich möchte gerne auf meiner Homepage einen Downloadcounter mit MySQL die Zugriffe auf bestimmte Dateien zählen lassen.
Allerdings würde ich das gerne so programmieren, dass ich nicht eine neue Seite laden muss um einen Download zu starten z.B. so
Code:
Ich will stattdessen den Counter in den Link einzufügen z.B. so
download.php?id=1
Code:
Vielleicht lässt sich das mit Java Script machen? Ich hab leider keine Ahnung :(
[url="./Programme/Einkaufsliste_setup.exe"]Einkaufsliste_setup.exe[/url]
Wenn ich den PHP-Quellcode direkt in den Link schreibe, wird der Wert des Counters auch beim Betreten der Seite erhöht. |
Re: [PHP] Download-Counter
Moin,
du musst das ueber eine extra-Seite machen, wenn du es nicht von client-seitigen Scripts abhaengig machen willst. Du kannst ja den Link auf die Extra-Seite verweisen lassen, dort updaten, Download-Header senden, und dann die Datei per readfile() an den Client senden. Funktioniert bei mir auch einwandfrei ;) Greetz alcaeus |
Re: [PHP] Download-Counter
Das wirst du so wohl nicht hinbekommen, da du mit JavaScript keine Daten speichern kannst.
Und da PHP eine Serverseitige Scriptsprache ist, ist dabei nix mit Benutzerinteraktion. Daher brauchst du eine Zwischenseite. Allerdings muss der Benutzer davon nichts merken. Du musst einfach folgendes machen:
Code:
Is zwar 'n roter Kasten da, aber ich poste das dennoch mal so
<?
if (isset($_GET['file'])) { // $_GET['file'] ist der Dateiname // Den passenden Wert in der Datenbank erhöhen header('Location: downloads/'.$_GET['file']); // Auf die Datei weiterleiten } ?> |
Re: [PHP] Download-Counter
Danke für eure Antworten :) Ich hab es in der Zwischenzeit mal mit einem Java-popup probiert, aber das wird von meinem Browser schon geblockt.
Werd jetzt die nächste Methode ausprobieren. @Hador: Den Quellcode packe ich in eine neue PHP-Datei oder? Ich nehme mal nicht an, dass die dann neu geöffnete Seite dann nicht geschlossen wird, wie kann ich das noch realisieren? |
Re: [PHP] Download-Counter
Anderweitig kannst du natürlich folgendes machen:
Code:
Wichtig dabei ist, dass die PHP Seite KEINE Ausgabe erzeugt, also quasi 0 Byte zurückliefert.<script> function CountDownload(id, datei) { location.href = '/count.php?id=' + id; window.setTimeout('location.href=\'' + datei + '\'', 1000); } </script> [url="#"]Datei[/url] Wenn dies der Fall ist wird die Seite nicht verlassen und der zweite Script-Part (window....) wird ebenfalls ausgeführt. So werden beide Dateien nacheinander aufgerufen. |
Re: [PHP] Download-Counter
Also ich mache das ganze so:
Datei "download.php":
Code:
Wenn du dann noch eine .htaccess ins Download-Verzeichnis reinpackst, die folgendes enthält:
<?php
if ($_GET[id] != "") { $query = "UPDATE downloads SET anzahl = anzahl + 1 WHERE id = '".intval($_GET[id])."'"; $result = mysql_query($query); $query = "SELECT dateiname FROM downloads WHERE id = '".intval($_GET[id])."'"; $datei = mysql_fetch_array(mysql_query($query)); $datei = $datei[dateiname]; if ($datei != "") { $filename = $_SERVER[DOCUMENT_ROOT]."/downloads/".$datei; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$datei\""); readfile($filename); } } } ?>
Code:
kannst du noch verhindern, dass die Downloads direkt aufgerufen werden. Das ist zwar eine neue Seite, aber diese Seite stellt im Prinzip den Download dar, daher ist das kein Problem.
Order Allow, Deny
Allow from localhost Deny from all Keine Garantie, dass es genauso funkioniert, hab nur meine kurz umgeschrieben :-) |
Re: [PHP] Download-Counter
@Markus: Du solltest noch ein
Code:
einbauen. ;)
mysql_free_result($result);
|
Re: [PHP] Download-Counter
Jo, sollte, mach ich aber nie :-) Aber hast natürlich recht... :D
|
Re: [PHP] Download-Counter
Also ich hab das jetzt so geregelt:
Code:
Die Variable in der Datenbank wird erhöht, aber weder der Download startet, noch wird das Fenster am Ende geschlossen. Wer weiß warum da passiert bekommt 'nen Kuchen :)
<?
if (isset($_GET['download'])) { switch ($_GET['file']) { case 1:header('Location: Programme/EMail_Checker_setup.exe'); ... case 28:header('Location: Programme/MrOnline_zip.zip'); } $db_link = @mysql_connect("localhost", "web89", "*****"); mysql_select_db("usr_web89_1"); $dlid=$_GET['download']; mysql_query("UPDATE dlcounter Set counter = counter+1 WHERE id=$dlid"); } ?> <script type= "text/javascript" > self.close(); </script> [edit=alcaeus]Datenbankpasswort entfernt! :warn: Mfg, alcaeus[/edit] |
Re: [PHP] Download-Counter
Probier mal
Code:
statt
case "1"
Code:
case 1
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz