![]() |
PHP - FileDownload Counter implementieren ohne DB
Also, mal angenommen, ich habe auf meinem Web-Server eine Datei Names MyFile.EXT. Ich biete sie zum Download. Ich will jetzt eine PHP-Skripte, die in einer Datei (counter.txt) schreibt, wieviel man meine MFile.EXT Datei heruntergeladen hat. Wie ? Und ja, bitte ohne MySQL.
Danke. |
Re: PHP - FileDownload Counter implementieren ohne DB
Kannst du PHP?
|
Re: PHP - FileDownload Counter implementieren ohne DB
Ja.
|
Re: PHP - FileDownload Counter implementieren ohne DB
Hallo sniper_w,
so dürfte es dann sein ...
Code:
bye
<?php
$file= fopen("counter.txt", "r+") or die ("die Datei laesst sich nicht oeffnen!"); fscanf($file, "%d", $count); $count++; rewind($file); fputs($file, $count); fclose($file); ?> Claus |
Re: PHP - FileDownload Counter implementieren ohne DB
Danke, ich habe mich ungeschickt ausgedrückt. Ich weiss wie man eine Datei per PHP öffnet, leist, screibt usw. Was ich nicht weiss ist, wenn man auf die Link (die zum Download führt) klickt, wei sendet man diese Datei an einen Client ( nach dem man den Counter um 1 erhöht hat)?
|
Re: PHP - FileDownload Counter implementieren ohne DB
mach einfach ne Weiterleitung auf die Datei
Code:
<?php
print "<meta http-equiv=\"refresh\" content=\"0; URL=http://mein.host/meine.datei\">"; ?> Greetz Sergej |
Re: PHP - FileDownload Counter implementieren ohne DB
Bei meiner Homepage mache ich das so:
Einen Ordner 'files' der nur eine .htaccess enthält:
Code:
Einen Ordner 'realfiles' der dann die Dateien enthält.
RewriteEngine on
RewriteBase /files/ RewriteRule ^(.+)$ /download.php\?file=$1 Eine download.php im Stammverzeichnis:
Code:
Das Ergebnis ist ein komplett transparenter Downloadcounter. Wenn der Client die Datei /files/abc.def anfragt, wird das intern auf /download.php?file=abc.def umgeleitet. Das Skript erhöht dann den Counter für die Datei um 1 (per MySQL) und schickt die Datei /realfiles/abc.def an den Client.
<?php
$filename = 'realfiles/' . $_GET['file']; if (IsSet($_GET["file"]) && file_exists($filename) && strpos($filename,'../') === false) { require 'dblogin.php'; $dbh = mysql_login(); mysql_select_db('danny'); $stats_query = "SELECT count FROM downloads WHERE file='" . $_GET['file'] . "'"; $stats_result = mysql_query($stats_query); if (mysql_num_rows($stats_result) > 0) { $stats_array = mysql_fetch_assoc($stats_result); if ($stats_array['count'] !== null) { $stats_query = "UPDATE downloads SET count = count + 1 WHERE file='" . $_GET['file'] . "'"; mysql_query($stats_query); } } mysql_close($dbh); header('Content-type: application/force-download'); header('Content-length:' . filesize($filename)); readfile($filename); } else { header('Status: 404 Not Found'); chdir('errors'); require '404.php'; } ?> Zitat:
Code:
und nicht per meta-refresh.
header("Location: http://mein.host/meine.datei");
|
Re: PHP - FileDownload Counter implementieren ohne DB
Danke, ihr habt geholfen, es geht wunderbar.
|
Re: PHP - FileDownload Counter implementieren ohne DB
Zitat:
Was spricht gegen den Meta-Refresh :?: Greetz Sergej |
Re: PHP - FileDownload Counter implementieren ohne DB
mit header gehts schneller ;)
|
Re: PHP - FileDownload Counter implementieren ohne DB
Die Umleitung per Header ist eleganter als die Umleitung per meta-refresh oder per Javascript. Letztere Methoden sollten nur benutzt werden wenn man kein serverseitiges Scripting machen kann.
Die Umleitung per Header geschiet sobald der Browser den Header empfangen hat. Bei Javascript/meta wird erst die gesamte Seite geladen (und dargestellt :!: ). Die Umleitung per Header ist nahtlos und spart Zeit. |
Re: PHP - FileDownload Counter implementieren ohne DB
ah okay...danke wusst ich noch gar nicht.
[edit] hmm anderseits gibt es in diesem Fall keinen Geschwindigkeitsverlust. Es wird ja nichts geladen, und die Weiterleitung wird direkt von script 'befohlen'. Ein Nachteil hat man bei Headern nämlich auch: Es kann/darf vorher nichts im Browser ausgegeben werden, was ja doch manchmal gewünscht ist.[/edit] Greetz Sergej |
Re: PHP - FileDownload Counter implementieren ohne DB
meta-refresh tut auch den Zurück-Knopf 'zerstören', jedenfalls kommt man mit einem einzigen Klick dann nicht zu der Seite zurück, wo man den Download angefragt hat, sondern zu der Seite die das meta-refresh enthält, und wird dort wieder sofort zum Download umgeleitet.
|
Re: PHP - FileDownload Counter implementieren ohne DB
deswegen rät das W3C auch von meta-forwarding ab, hab mal einen artikel darüber gelesen, finde ihn jedoch grad nicht
[edit] gefunden: ![]() |
Re: PHP - FileDownload Counter implementieren ohne DB
Okay überzeugt =)
Greetz Sergej |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:56 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