Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Frage zu Tutorial "Download Script"
Antwort
 
Themen-Optionen
Alt 19.02.2006, 14:21   Nach oben    #1
bitkop
Neuer Benutzer
 
Registriert seit: 07.02.2006
Beiträge: 3
Standard Frage zu Tutorial "Download Script"

Hallo

ich habe eine Webseite über Videobearbeitung. Auf der Seite stelle ich Bilder, kleine Videos und PDF-Anleitungen bereit.
In der Auswertung meiner Statistiken sehe ich aber immer wieder das direkt auf Dateien von anderen Webseiten verlinkt wird. Von einem Kumpel, der sich auch schon etwas mit PHP auskennt, habe ich diese Seite hier bekommen weil hier ein Script angeboten wird um Fremdverlinkung zu sperren.
Die Umbenennung der Dateien hat auch gut geklapt, aber die Sperre selber verursacht eine Fehlermeldung beim anklicken einer Datei.
Andere Webseiten beschreiben nur den Einsatz mit der .htaccess Datei, die den Referer auslesen und entsprechend sperren. Das geht aber anscheind nicht mit meinem Strato Anbieter.

Hier nun der Code wie ich ihn hochgeladen habe und eine Fehlermeldung bekomme:

PHP-Code:
<?php

// Seiten die Gesperrt werden sollen

 
$sites = array(
                
"banned",
                [
url]"http://www.outdoorspass.de"[/url],
                [
url]"http://www.teenslips.de"[/url],
                [
url]"http://www.magix.de"[/url],
                );

// Ende der Seitenauflistung fuer Sperrung


// Ueberpruefung der Gesperrten Seite

 
function test_banned($sites$referer)  
  {
     for(
$i=1;$i<count ($sites);$i++)  
        {
         if(
$sites[$i] == $referer)  
            {
            return 
true;
            }
        }
  }

 if (
$sites[0] == "banned")  {
     
$test test_banned($sites$referer);
     if (
$test == true)  {
         echo 
"Referer nicht zugelassen";
         exit();
     }
  } 
 else 
     {
      die(
"Fehler in \$sites" );
     }

 
$referer explode("/"$_SERVER['HTTP_REFERER']);
 
$referer $referer[0] ."//" .$referer[2];

// Hier kommt die Zuweisung für den Download, nichts aendern

$download_dir "php/xordner/";
$files = array(
               
"1" => "tmpg.pdf",
               
"2" => "vdm.pdf",
               
"3" => "starw.pdf",
               
"4" => "land.pdf",
               
"5" => "beamen.pdf",
               
"6" => "unkenn.pdf",
               
"7" => "licht.pdf",
               
"8" => "strobo.pdf",
               );
$file $download_dir.$files[$_GET['id']];

/*
 * Ob Datei vorhanden ist
 */

if(!file_exists($file)) {
    echo 
"Die Datei existiert nicht bzw. ist nicht erreichbar!!";
    exit();
}

/*
 * Ende Befehl ob Datei vorhanden ist
 */

header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".$files[$_GET['id']]);

readfile($file);
?>
Die Webseiten Outdoorspass und Teenslips sind auch Seiten von mir, die ich für die Fremdverlinkung zum testen nutze.

Im Original-Tutorial auf dieser Seite ist mir aufgefallen das im Bereich:
PHP-Code:
 $sites = array(
                
"banned",
                
"[url]http://www.outdoorspass.de"[/url],
                
"[url]http://www.teenslips.de"[/url],
                
"[url]http://www.magix.de"[/url], 
zwar das schließende [/url] farblich dargestellt wird ( weil es eine "Anweisung" ist ) aber die Einleitung [url] dargestellt wird als wenn es schon zur Webadresse gehört.
Da wird doch dann was geschlossen was vorher nicht geöffnet wurde. Hier habe ich aber auch schon die " so gesetzt wie es im oberen Code zu lesen ist.
Als Fehlermeldung bekomme ich:
Parse error: parse error, unexpected '[', expecting ')' in /mnt/kw2/02/382/00000018/htdocs/download.php on line 7
Über Google habe ich auch schon nach diesem Fehler gesucht, der Sagte mir dann aber das der Fehler meist eine Zeile über dem angegebenen ligt. Also wäre der Fehler in meinem Fall in Zeile 6 zu suchen.

Leider ist das Tutorial auch nicht als Download vorhanden, wie es am Ende der Beschreibung angekündigt wurde.

Ich habe ja auch schon verschiedene Möglichkeiten versucht was die Anordnung des Codes angeht. Habe " verschoben oder weggelassen, statt [ Klammern habe ich ( Klammer probiert.

Für eine "idiotensichere" Anleitung oder Hilfe wäre ich recht dankbar.

Bitkop
bitkop ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:08   Nach oben    #2
Jojo
Irgendwas mit e
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

ich denke mal, du wurde schlicht und einfach vom Verfasser die " zu früh geschlossen. da [ weder eine Variable noch ein Token irgendeiner Art ist, wirft dir der Compiler natürlich einen Fehler.
Das muss ganz in die ". Und das Komma am Ende is auch falsch.

PHP-Code:
$sites = array(
                
"banned",
                
"[url]http://www.outdoorspass.de[/url]",
                
"[url]http://www.teenslips.de[/url]",
                
"[url]http://www.magix.de[/url]"

//edit: Das heißt nich Compiler.... Wie heißt das nochmal? Ich komm grad net drauf
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:10   Nach oben    #3
Lars
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Die [url]-Tags kommen vom vB.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:13   Nach oben    #4
Jojo
Irgendwas mit e
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

stimmt,
das [url] gibt gar keinen Sinn ^^
Mach die mal weg. Kein natürlicher Referrer sieht so aus.
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:38   Nach oben    #5
bitkop
Neuer Benutzer
 
Registriert seit: 07.02.2006
Beiträge: 3
Standard Neuer Versuch

Danke schon mal für die schnelle Hilfe!

Hatte zwar eben schon einen Text geschrieben wo ich meinte das es immer noch von jeder Seite zu laden geht, aber das mußte ich ganz schnell wieder löschen.
Jetzt geht alles so wie ich es gerne hätte.
Vielen Dank für die Hilfe!

Werde jetzt noch den Anzeigetext verändern und noch ein paar Webseiten aus meiner Statistik eintragen.
Wer mal ein Problem mit Videobearbeitung haben sollte schreibt mich halt mal im Gegenzug an.

Bitkop

Geändert von bitkop (19.02.2006 um 15:43 Uhr).
bitkop ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:44   Nach oben    #6
Jojo
Irgendwas mit e
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

Guck dir mal die beiden Posts dirket über dir an.
Da steht der Fehler schon.
Aus irgendeinem Grund wurde bei dem Tutorial geschlampt und bei den URL ein BBTag hinzugefügt.
Du musst natürlich die und die entfernen.
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:00   Nach oben    #7
Corvin
Erfahrener Benutzer
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 439
Standard

Danke für den Hinweis, die [url]-Tags wurden vom vB automatisch gesetzt.
Ich habe sie mal entfernt.

Zitat:
Zitat von Jojo
//edit: Das heißt nich Compiler.... Wie heißt das nochmal? Ich komm grad net drauf
-> Interpreter
__________________
Corvin ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:00   Nach oben    #8
bitkop
Neuer Benutzer
 
Registriert seit: 07.02.2006
Beiträge: 3
Standard Läuft alles gut

Habe jetzt alles so laufen wie es soll!
Habe hier noch mal den verbesserten Code abgedruckt, falls noch mal jemand Probleme haben sollte wie ich.
Dieses Script bezieht sich auf das Tutorial: Download-Skript, Downloads mit download.php?id=x
aus diesem Forum.
PHP-Code:
<?php

// Seiten die Gesperrt werden sollen

 
$sites = array(
                
"banned",
                
"http://www.nichterwuenscht.de",
                
"http://www.nichterewuenscht1.de",
                
"http://www.nichterewuenscht2.de"
                
);

// Ende der Seitenauflistung fuer Sperrung


// Ueberpruefung der Gesperrten Seite

 
function test_banned($sites$referer)  
  {
     for(
$i=1;$i<count ($sites);$i++)  
        {
         if(
$sites[$i] == $referer)  
            {
            return 
true;
            }
        }
  }

 
$referer explode("/"$_SERVER['HTTP_REFERER']);
 
$referer $referer[0] ."//" .$referer[2];

 if (
$sites[0] == "banned")  {
     
$test test_banned($sites$referer);
     if (
$test == true)  {
         echo 
"Text der als Fehlermeldung erscheinen soll";
         exit();
     }
 } elseif (
$sites[0] == "allowed") {
     
$test test_banned($sites$referer);
     if (
$test != true) {
         echo 
"Text der als Fehlermeldung erscheinen soll";
         exit();
   } 
 } else  {
      die(
"Fehler in \$sites!!" );
 }


// Hier kommt die Zuweisung für den Download, nichts aendern

$download_dir "images/dateien/";
$files = array(
               
"1" => "bild01.jpg",
               
"2" => "datei01.exe",
               
"3" => "video01.wmv",
               
"4" => "lied01.mp3",
               
"5" => "beamen.pdf",
               );
$file $download_dir.$files[$_GET['id']];

/*
 * Ob Datei vorhanden ist
 */

if(!file_exists($file)) {
    echo 
"Die Datei existiert nicht bzw. ist nicht erreichbar!!";
    exit();
}

/*
 * Ende Befehl ob Datei vorhanden ist
 */

header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".$files[$_GET['id']]);

readfile($file);
?>
Vielen Dank an:
Lars und Jojo für die Hilfe und Fehlerbereinigung

Gruß
Bitkop
bitkop ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:02   Nach oben    #9
Jojo
Irgendwas mit e
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

Zitat:
Zitat von Corvin Gröning
Danke für den Hinweis, die [url]-Tags wurden vom vB automatisch gesetzt.
Ahso, hab Lars' Beitrag grade erst kapiert

Zitat:
Zitat von Corvin Gröning
-> Interpreter
Danke ^^ War noch irgendwie bei Java
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 01:09   Nach oben    #10
karabey
Neuer Benutzer
 
Registriert seit: 19.03.2006
Beiträge: 17
Standard

Ist wirklich ein einfaches Script und sehr gut zusammengestellt.

Wäre es auch möglich das man umgekehrt von anderen Server per Link Dateien downloaden kann?
karabey ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 13:27   Nach oben    #11
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.800
Standard

Zitat:
Zitat von karabey
Wäre es auch möglich das man umgekehrt von anderen Server per Link Dateien downloaden kann?
Was meinst Du genau?

Wieso sollte das nicht gehen? (glaube ich verstehe Dich gerade falsch )
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 19:08   Nach oben    #12
karabey
Neuer Benutzer
 
Registriert seit: 19.03.2006
Beiträge: 17
Standard

Also hier sind die Daten auf ein Ordner zugewiesen

PHP-Code:
$download_dir "php/xordner/";
$files = array(
               
"1" => "tmpg.pdf",
               
"2" => "vdm.pdf",
               
"3" => "starw.pdf",
               
"4" => "land.pdf",
               
"5" => "beamen.pdf",
               
"6" => "unkenn.pdf",
               
"7" => "licht.pdf",
               
"8" => "strobo.pdf",
               );
$file $download_dir.$files[$_GET['id']]; 
umgeschrieben auf
PHP-Code:
$download_dir "files/download/";
$files = array(
               
"1" => "multiserver.zip",
               
"2" => "warenkorb.gif",
               
"3" => "video01.wmv",
               
"4" => "lied01.mp3",
               
"5" => "beamen.pdf",
               );
$file $download_dir.$files[$_GET['id']];

$download_link "http://www.domain.de/ftp/";
$link_files = array(
               
"1" => "movitel.zip",
               );
$link_file $download_link.$link_files[$_GET['link_id']];

/*
 * Ob Datei vorhanden ist
 */

if(!file_exists($file)) {
    echo 
"Die Datei existiert nicht bzw. ist nicht erreichbar!!";
    exit();
}

if(!
file_exists($link_file)) {
    echo 
"Die Datei existiert nicht bzw. ist nicht erreichbar!!";
    exit();
}

/*
 * Ende Befehl ob Datei vorhanden ist
 */

header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".$files[$_GET['id']]);
header("Content-Disposition: attachment; filename=".$files[$_GET['link_id']]);

readfile($file);
readfile($link_file);
?> 
so wäre es optimal
PHP-Code:
$download_dir "files/download/";
$files = array(
               
"1" => "http://www.domain.de/ftp/multiserver.zip",
               
"2" => "warenkorb.gif",
               
"3" => "video01.wmv",
               
"4" => "lied01.mp3",
               
"5" => "beamen.pdf",
               );
$file $download_dir.$files[$_GET['id']];

/*
 * Ob Datei vorhanden ist
 */

if(!file_exists($file)) {
    echo 
"Die Datei existiert nicht bzw. ist nicht erreichbar!!";
    exit();
}

/*
 * Ende Befehl ob Datei vorhanden ist
 */

header("Content-Type: x-type/subtype");
header("Content-Length: ".filesize($file));
header("Content-Disposition: attachment; filename=".$files[$_GET['id']]);

readfile($file);
?> 
aber funktionieren würde es nicht natürlich!!!

Geändert von karabey (01.04.2006 um 19:12 Uhr).
karabey ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 23:50   Nach oben    #13
Jojo
Irgendwas mit e
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 388
Standard

So, da ich nicht ganz durchsteige, was du eigentlich willst, rate ich mal (keine Sorge, muss nicht an dir liegen, ich bin......ähh.......beschwippst...)

Du willst, dass du per Link eine Datei downloaden kannst, aber nicht direkt sondern über ein Auswahlverfahren, richtig?
Wenn du also folgendem Link folgst:
http://www.meinedomain.de/download.php?id=2
willst du files/download/warenkorb.gif zum Download bekommen! Richtig?

Ok, gehen wir davon aus, dass du das willst.
Nun willst du das ganze auf entfernte Dateien ausweiten.
So, das Problem ist nun einerseits, dass du mit file_exists nicht auf entfernte Dateien prüfen kannst. Das steht hier.