PHP-Problem: Weiterleitung auf Video

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von LogicalLimit, 07.04.2006.

  1. #1 LogicalLimit, 07.04.2006
    LogicalLimit

    LogicalLimit Eroberer

    Dabei seit:
    24.05.2004
    Beiträge:
    67
    Zustimmungen:
    0
    Heyho!
    Ich möchte ein kleines script für meine Seite machen, das mir dabei hilft die auf der Seite befindlichen Videos nicht ohne weiteres runter laden zu können.
    Habe das bisher folgendermaßen gemacht:
    Eine mySQL-Tabelle VideoQueue, in der eine Zuordnung von SessionID zur gewünschten Video-ID steht.
    Dann eine datei movieplayer.php, die die Videodatei anzeigt und nach dem öffnen die assoziation löscht, damit das Video nicht mehr runter geladen werden kann.
    Der Movieplayer sieht so aus:
    PHP:
    <?
      include(
    "classes/database.class");
      include(
    "classes/video.class");
      
      
    $video = new Video();
      
    $vid $video->getReserved($_GET["sid"]);
      
    $videoinfo $video->getVideoInfo($vid);
      
    $filename $videoinfo["FILENAME"];
      
    $video->clearQueue($_GET["sid"]);
      
    header("Location: /videos/$filename");
    ?>
    $video->getReserved($SessionID) gibt die Video-ID zurück, die der User bestellt hat, $video->getVideoInfo($vid) gibt ein Array mit Informationen über die Videodatei zurück und clearQueue($SessionID) löscht die assoziation von SessionID und VideoID.
    Wenn ich die Zeile
    PHP:
    $video->clearQueue($_GET["sid"]);
    heraus lasse, funktioniert alles super. Das Video, das in der Tabelle zur SessionID assoziiert ist, wird angezeigt, allerdings bleibt dann die Verbindung auch in der Tabelle und das Video lässt sich mehrmals aufrufen.
    Wenn ich nun die o.g. Zeile wieder einfüge, verändert sich die Seite zwar zur MediaPlayer-Ansicht, aber es wird kein Video abgespielt. Habe auch schon die Variable $filename abgefangen und da steht der richtige Dateiname drin, habe also keine Ahnung, warum das nicht läuft :(

    Habt ihr vielleicht ne Idee?
    Freue mich auf eure Antworten.

    Gruß, Alex
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 sono, 07.04.2006
    Zuletzt bearbeitet: 07.04.2006
    sono

    sono Sack Flöhe Hüter

    Dabei seit:
    31.01.2004
    Beiträge:
    1.299
    Zustimmungen:
    0
    Ort:
    http://webfrap.de
    1. Ich hoffe deine Dateien mit der .class endung liegen in einem .htaccess geschützen Bereich bzw auserhalb der Webroot sonst kanns sich jeder den Code von denen ausgeben lasse.

    2. Sowie deine Weiterleitung aussieht kann jeder der denk Link zu Video kennt sich das Video direkt runterladen.
    Sag mirs falls ich mich irre.

    Mein Vorschlag zur Lösung :

    PHP:
    <?php
    /*************************************************************************************

    Autor      :     Dominik Bonsch
    Version     :    Alpha 0.2_3
    Datum    :    05.03.2006

    **************************************************************************************/
    session_name('SESSION');
    session_start();
    error_reporting(0);

    if(! 
    $_SESSION['LOGIN']){
        throw new 
    Exception("NE NE SO bekommste nix !!");
    }

    $file trim($_GET['fi']);

    if(isset( 
    $_GET['pa'])){
        
    $path trim($_GET['pa']);
    }else{
        
    $path "";
    }

    $area trim($_GET['ar']);

    if ( isset(
    $_GET['nn']) ){
        
    $newname $_GET['nn'];
    }
    else{
        
    $newname $file;
    }

    switch( 
    $area ){

            case 
    'files' : {
                
    $prepath "/files/data/";
                break;
            } 
    // ENDE CASE

            
    case 'pic' : {
                
    $prepath "/files/pics/";
                break;
            } 
    // ENDE CASE

            
    default: {
                throw new 
    Exception("GETFILEATTACK");
            } 
    // ENDE FUNKTION

    // ENDE SWITCH

          
    header("Content-Disposition: attachment; filename=$newname");
          if ( isset(
    $_GET['fd']) ){
              
    header("Content-Type: application/force-download");
          }

    try{
            
    // Das musste selbst schreiben.
        
    require_once ( "../app/functions/f_sys_strings.php" );

        if ( !
    pruefe_filename$file ) ){
            throw new 
    Exception("GETFILEATTACK");
        }
          
    // Auslesen des nun hoffentlich auf jeden fall sicheren Files
          
    readfile("$prepath$path$file");

    // ende tryblock

    catch ( Exception $exception ){
        echo 
    $exception->getMessage();
    }
    ?>
    Ich denke mal es ist klar was passiert und dass du mit dem File deine Dateien von auserhalb der Webroot laden kannst ohne das je jemand dran kommt wenn du es nicht willst.

    Du solltest das ganze allerdings schön absichern, also filename auf / udn ./ usw prüfen, so mach ichs , aber ein wenig arbeit will ich dir noch lassen.

    PS falls du php4 hast musst du die Exceptions rausschreiben, is klar ne ?

    Gruß Sono
     
  4. #3 LogicalLimit, 07.04.2006
    LogicalLimit

    LogicalLimit Eroberer

    Dabei seit:
    24.05.2004
    Beiträge:
    67
    Zustimmungen:
    0
    Hm... vielen Dank, aber das ist irgenwie nicht so ganz das, was ich mir erhofft hatte :(
    Die Funktionsweise und der Aufbau des scripts sollten schon wie oben beibehalten werden. Ich bin nur total verwirrt, wieso es funktioniert, wenn ich die Assoziation nicht lösche, obwohl garnicht mehr auf sie zugegriffen werden muss.
    In dem clearQueue steht übrigens nur der MySQL-Befehl "DROP FROM Queue WHERE SessionID = '$SessionID'"

    Gruß, Alex
     
  5. sono

    sono Sack Flöhe Hüter

    Dabei seit:
    31.01.2004
    Beiträge:
    1.299
    Zustimmungen:
    0
    Ort:
    http://webfrap.de
    Klär mich mal auf was du mit assoziation meinst.

    Hast du die videos irgendwo , machst nen link drauf und nach dem aufrufen löschst du den link drauf ? Oder hab ich das falsch verstanden .

    Das lässt darauf schliesen , dass du dem donwload quasi die Datei unterm Arsch wegziehst wenn ich das richtig verstanden habe.

    Du löschst schon während des Downloads den Link auf die Datei wenn micht alles täuscht.

    Kann das sein ?

    Gruß Sono
     
  6. hehejo

    hehejo blöder Purist

    Dabei seit:
    12.10.2003
    Beiträge:
    1.280
    Zustimmungen:
    0
    Ort:
    Stein (Mittelfranken)
    Nein.
    So wie ich das gelesen habe, hat er einfach eine Tabelle in einer Datenbank in der die aktuelle SessionId mit einer Videodatei verknüpft ist.
     
  7. #6 LogicalLimit, 08.04.2006
    LogicalLimit

    LogicalLimit Eroberer

    Dabei seit:
    24.05.2004
    Beiträge:
    67
    Zustimmungen:
    0
    Richtig!

    Und mit assoziation ist eben genau diese Verknüpfung von SessionID zur VideoID gemeint.
    Nachdem das script die VideoID ausgelesen hat, weiß es also, welches Video der User haben möchte und somit sollte auch die Verknüpfung problemlos gelöscht werden können... sollte...


    Gruß, Alex
     
Thema:

PHP-Problem: Weiterleitung auf Video

Die Seite wird geladen...

PHP-Problem: Weiterleitung auf Video - Ähnliche Themen

  1. htaccess, Weiterleitung mit www und ohne www

    htaccess, Weiterleitung mit www und ohne www: Hallo zusammen, wie richtet man eine Weiterleitung einer alten Domain auf eine neue Domain, aber auch mit der Option ohne „www“ in der URL, dh...
  2. linux.de: Weiterleitung zu Wikipedia

    linux.de: Weiterleitung zu Wikipedia: Die Betreiber von linux.de scheinen den Betrieb des Web-Portals eingestellt zu haben. Lediglich die Jobs-Subdomain existiert noch. Alle weiteren...
  3. Proxyweiterleitung in Apache (Webmin)

    Proxyweiterleitung in Apache (Webmin): Hallo, ich versuche eine Seite über meinen Apache-Server zugänglich zu machen. Jedoch funktioniert das nicht so, wie ich mir das Vorgestellt...
  4. Port "Mirroring" bzw Weiterleitungen?

    Port "Mirroring" bzw Weiterleitungen?: Hi. Kann man unter Linux eine Art IP Port Mirroring bzw Weiterleitung machen? Angenommen, ich habe einen Dienst. Dieser läuft standardmäßig auf...
  5. iptables weiterleitung port vom internen Netzwerk zum internet Port

    iptables weiterleitung port vom internen Netzwerk zum internet Port: Hey Guys, ich muss vorab sagen das ich absolut netzwerk hasse. Ich habe jetzt aber einen Firewall Seite gefunden, wo man einen iptables skript...