• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Klickcounter & Downloadskript

  • Ersteller Ersteller matibaski
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
M

matibaski

Guest
Moin!
Ich habe zwei Fragen/Probleme:

1. Wie macht man einen Klickcounter? Ich möchte bei meinen Dateien, die gedownloadet werden, dass angezeigt wird, wieviele Male diese schon gedownlaodet wurden.
Kann mir da jemand helfen?
Google brachte mir da fertige Scripts.
Doch ich will was lernen ;)

2. Wie machen das die einen Seiten, dass steht seite.php?download=dateixy
Ich bin davon ausgegangen, dass diese mit einem switch() machen, doch ich kann mir nicht vorstellen, wie so etwas aussehen könnte. :D

Links mit Anleitungen genügen mir.

MfG, matibaski
 
Also du machst das so. Du speicherst deine downloads so in einer Datenbank:
id
dateiname
klicks
Nun verlinkst du beim download z.B. auf die downloads.php?id=1
Nun sorgst du dafür das die Klicks um eins erhöht wird wo die id 1 ist. Dann verlinkst du nur noch einen Header auf die Datei und fertig
 
Das wirklich schöne an solch einer Methode ist eher, dass man die eigentlichen Dateien auch über fopen() öffnen kann, und diese dann in der Datei ausgibt.

Nützlich, wenn man den direkten Download verbieten möchte, oder nur angemeldeten Usern den Download erlauben möchte.
Voraussetzung ist, dass man folgende Struktur z.B. auf dem Server aufbaut.

Code:
/
/files
/www
/www/images

Man kann nun in der download.php auf den Ordner ../files/dateiname zugreifen, jedoch sind die Daten nicht direkt zu öffnen.
 
Danke @ Fleyer
Ich werd's so machen..

@da_loki:
Ich habe dien Prinzip verstanden, doch ich weiss nicht wie ich sowas anstelle.
 
@da_loki, ich habe es auch nicht verstanden...
ist das/giebt es eine möglichkeit, dem Server zu sagen, das nur er auf ein bestimmtes verzeichnis zugreifen darf (also das keine inhalte per browser abgerufen werden dürfen)
sprich, um seine dateien nur über ein auf dem server hinterlegten php script auslesen zu können?
 
@da_loki, ich habe es auch nicht verstanden...
ist das/giebt es eine möglichkeit, dem Server zu sagen, das nur er auf ein bestimmtes verzeichnis zugreifen darf (also das keine inhalte per browser abgerufen werden dürfen)
sprich, um seine dateien nur über ein auf dem server hinterlegten php script auslesen zu können?
Ja das geht. Funktioniert aber nicht mit allen Server.
 
ok, fllt hätte ich meine frage anders formulieren sollen:mrgreen:
wie macht man das

@matibaski tschuldige, das ich deinen theard misbrauche:-D
 
Hallo,

dazu muss man über .htaccess den Zugriff für Besucher sperren. Das Script ist aber weiterhin berichtigt die Dateien einzulesen. Den Header der Datei kann man dann mit dem PHP Befehl header() anpassen, sodass die Datei zum Download angeboten wird und auch der richtige Dateiname erscheint.


N43
 
.httpaccess ist ja noch schlimmer als c++ Oo
giebt es irgentwo ein "step by step" tutorial dafür (was einfacher zu verstehen ist, als selfHTML, oder die ersten 8 seiten von googel):oops:
 
Normalerweise kann man ja seine Domain so einstellen, dass diese auf den Ordner /www zeigt.
Ich weiß, dass es bei CONFIXX sowie beim sysCP funktioniert ;)
Wichtig ist, dass der open_basedir weiterhin auf / liegt !
Sonst kommt PHP nicht tiefer als der Ordner, der angegeben ist, und dann funktioniert leider auch nicht das sichern der Daten.
Normalerweise ist dafür KEINE .htaccess notwendig, da der Ordner an sich nicht aus dem Web erreicht werden kann. Der Aufruf http://www.meinedomain.de/../datei.pdf kann ja nicht gelingen.

Die PHP Datei "download.php" muss den header so verändern, dass es als Datei vom Browser erkannt wird. Hierfür sind besonders MIME-Typen wichtig!
Über ein fopen(), fread() und fclose() wird dann einfach der Dateiinhalt in die PHP Datei mit echo geschrieben, und der User erhält eine hoffentlich vollständige Datei ;)
 
oh schande...
kannst du das aufmalen;ugl :lol:
ich habe gerade mal verstanden, das es vordefinierte ordner giebt, die nicht aufgerufen werden können, aber doch aufgerufen werden können... cool 8)

geht das auch auf dem xammp oder bin ich einfach nur doof? (jaja, wehe einer antwortet "letzteres;Jump )
 
Aber auch nur, wenn du auf die Ordner über dem root-dir Zugriff hast.


N43

Ich gehe ja nicht über das Root Dir hinaus.

Es ist einzig und allein die Frage, ob PHP im open_basedir / stehen hat, oder wenn ich meine Domain auf /www lege, ob dann /www das open_basedir in PHP ist. Wenn dem so ist, habe ich leider keine Möglichkeit mit Skripten in /www auf /files zuzugreifen.
Normalerweise wird aber / als open_basedir genommen.
Einfach mal testen ;)

Erstellt euch eine Subdomain im Confixx ( test.meinedomain.de ), und lasst diese auf /test/www in eurem FTP Directory zeigen.
Wenn ihr jetzt in der info.php euch die phpinfo(); ausgeben lasst, schaut euch den open_basedir an. (Geht auch in XAMPP ;)) Wenn ihr jetzt folgenden Code in /test/www ausführt, wisst ihr, ob alles klappt :)

Ordnerstruktur:
Code:
/
/test
/test/www
/test/files
PHP:
<?php
$datei = '../files/test.txt';
$dateiHandler = fopen($datei, 'w+');
fputs($dateiHandler, "Es scheint zu funktionieren...\n\nViel Spass!");
fclose($dateiHandler);
echo 'All done...<br />Please check the filesystem.';
?>
Wenn ihr nun in /test/files die Datei test.txt findet, scheint es zu funktionieren.

*Tipp*
Um mit XAMPP "anständig" arbeiten zu können, verweise ich auf die c:/xampplite/apache/conf/extra/httpd-vhosts.conf *path may change to your installation of xampp* und könnt euch dort eigene VHosts erstellen.

Code:
<VirtualHost 127.0.0.1>
    ServerAdmin html@localhost
    DocumentRoot c:/xampplite/htdocs/html/www
    ServerName html.local
</VirtualHost>
Nun legt ihr die oben genannte Ordnerstruktur an, und zwar in c:/xampplite/htdocs/html.

Jetzt müsst ihr eurem Rechner noch sagen, dass http://html.local auf euren Rechner zeigt.
Dafür editiert ihr die hosts.
Bei XP liegt diese unter c:/windows/system32/drivers/etc/

Dort fügt ihr die Zeile
Code:
127.0.0.1    html.local
ein, und ruft die Url http://html.local auf, sobald ihr euren Apache neu gestartet habt.
Diese Seite sollte die Datei c:/xampplite/htdocs/html/www/index.php nicht finden -.-

Hoffe dies konnte alle Klarheiten beseitigen ^^
*p.s.: Kann das ganze hier gerne mal ausführlicher als Tutorial schreiben
 
Also du machst das so. Du speicherst deine downloads so in einer Datenbank:
id
dateiname
klicks
Nun verlinkst du beim download z.B. auf die downloads.php?id=1
Nun sorgst du dafür das die Klicks um eins erhöht wird wo die id 1 ist. Dann verlinkst du nur noch einen Header auf die Datei und fertig
Habe nun mit dem Downloadportal angefangen.
Also ich bin nun eine Tabelle mit 3 Spalten am erstellen:
Code:
ID     INT AUTO_INCREMENT PRIMARY KEY,
Name   VARCHAR(60),
Klicks ??,
Nun: Was soll ich bei Klicks setzen? Ich dachte an INT(), doch ich mach mal lieber noch nichts falsch :D

Wie kann ich dann, wenn ein Download berietsteht, das Klick"menü" ausführen?
HTML:
<a href="datei.zip" onclick="Hierwas">Download</a>
Etwa so?
Doch wie kann man bei einer MySQL Tabelle, dies so einstellen, dass es immer eins nach oben geht? (Eine Zahl höher)

MfG,matibaski
 
Klicks ist ein integer Typ.
Sollen ja nur Zahlen rein ;)

PHP:
mysql_query("UPDATE downloads SET Klicks=Klicks+1 WHERE id='$_GET[id]');

In der PHP-Datei kannst du den header() auf die Datei drehen, sodass der Download automatisch angeboten wird, oder du öffnest ein PopUp.

PHP:
$downloadurl = 'pfad/zur/datei.zip';
echo '<script type="text/javascript">';
echo 'window.open("'.$downloadurl.'")';
echo '</script>';
 
*schnuff jammert noch ein wenig*
also, soweit, wie du gesagt hast, bin ich schon...
PHP:
$upload_file_dir_i=0;
$upload_file_d		=fread($upload_file,$_FILES['datei']['size']);
$upload_file_dir	=opendir("../files/");
if(!empty($upload_file_dir)){
  while($upload_file_dir_rd=readdir($upload_file_dir)){
    $upload_file_dir_rd=explode($upload_file_dir_rd,"~");
    if($upload_file_dir_rd[0]==$user_name){
      $upload_file_dir_i++;
    }
  }
  closedir($upload_file_dir);
  $upload_file_name	=$user_name."~".$upload_file_dir_i.".php";
  //$_POST['name']		=mysql_escape_string($_POST['name']);
  fclose($upload_file);
  if(!@mysql_query("INSERT INTO file (ordnerid, user, name, header, datei, datum, vissible) VALUES ('$dir_id', '$user_name', '".$_POST['name']."', '".$_FILES['datei']['type']."', '$upload_file_dir_i' ,'".date("Y-m-d")."', '')") || !move_uploaded_file($upload_file_d,"../files/".$upload_file_name)){
...
nur da ist irgentwo der wurm drin, die datei wird einfach nicht gespeichert :'(
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben