Portal > Foren > PHP > PHP-Programmierung > Frage zu Tutorial "Download Script"
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 19.02.2006, 14:21 Nach oben    #1
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:08 Nach oben    #2
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:10 Nach oben    #3
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:13 Nach oben    #4
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:38 Nach oben    #5
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 15:44 Nach oben    #6
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:00 Nach oben    #7
Corvin Gröning
 
Benutzerbild von Corvin
 
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 459
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:00 Nach oben    #8
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.02.2006, 16:02 Nach oben    #9
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 01:09 Nach oben    #10
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 13:27 Nach oben    #11
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.512
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 19:08 Nach oben    #12
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.04.2006, 23:50 Nach oben    #13
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
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.
Und andererseits kannst du per readfile() URLs nur öffnen, wenn die fopen-wrapper erlaubt sind, das steht hier.
Außerdem hat dein Script einen Fehler, weil auch bei URLs ein $file à la files/download/http://www.domain.de/ftp/multiserver.zip entstehen würde, aber das ist eine andere Geschichte...

Du müsstest also auf jeden Fall erstmal die fopen-wrappers erlauben. Das wär das mindeste. Und die anderen Hürden müsstest du umgehen.

Ich hoffe, ich konnte dir deine Frage beantworten.
Ja es geht, aber nur mit Einschränkungen und unter besonderen Vorraussetzungen.

Gruß,
Jojo
__________________
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2006, 08:20 Nach oben    #14
Neuer Benutzer
 
Registriert seit: 19.03.2006
Beiträge: 17
Standard

Also kurz gemeint ich möchte Externe Dateien Download über mein eigenen Server zulassen.

Meine Domain -> http://www.test.de
Fremder Domain -> http://www.domain.de

Im fremden Domain ist eine Datei "domain.zip" (http://www.domain.de/domain.zip)

Dies will ich so downloaden
http://www.test.de/download.php?id=212
karabey ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.04.2006, 12:36 Nach oben    #15
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Ja sagte ich ja bereits.
file_exists() musst du in dem Fall leider abschreiben.
readfile() kannst du dabei zwar verwenden, aber nur wenn in der php.ini allow_url_fopen aktiviert ist.
Du kannst allerhöchstens versuchen, rauszufinden, ob die Option aktiviert ist, und wenn nicht, eine Umleitung per header() zu machen.
__________________
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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zum Tutorial"dynamisches Füllen einer SELECT-Liste" flupsi PHP-Programmierung 16 12.03.2006 16:26
kleines feines soap tutorial für php5 robo47 Literatur 5 24.01.2006 16:10
frage zu einem tutorial Steven Gerrard PHP-Programmierung 6 24.01.2006 13:51
Loginsystem mit Frames, Frage zum Tutorial Jan PHP-Programmierung 3 21.01.2006 21:26
Frage zum Tutorial: eigenes Template-System Waldvogel PHP-Programmierung 7 29.12.2005 19:18


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:38 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31