Tatsächlichen Dateinamen verbergen

Hey pdatrain,
das geht auf jeden Fall in die richtige Richtung. Habe folgende Sachen geändert:
PHP:
header("Content-Type: audio/x-mpegurl"); 
//es werden nur .m3u-Dateien geladen
header("Content-Disposition: inline; filename=".$tfilename); 
//mit "inline" statt "attachment" umgehe ich die "Öffnen oder Speichern unter"-Box
Soweit so gut. Allerdings kann der Player die Datei nicht abspielen, da er den Dateinamen der php-Datei übermittelt bekommt.
Ich übergebe den absoluten Pfad zur Stream-Datei an $tfilename. Wo ist der Fehler?
 
$tfilename ist nur der Dateiname, nicht der Pfad!

Der Hintergrund ist: Ich benutze das Script um die richtige URL auf meinem Server zu verbergen und direktes Linken auf die Datei zu verhindern. In $turl steht der komplette Pfad zur Datei, etwa "files/datei.zip" . In $tfilename steht, unter welchem Namen die Datei gespeichert werden soll, etwa "speichermich.zip" . Dieser Name wird in der SpeichernUnter-Dialogbox vom Browser angezeigt, obwohl die Datei unter datei.zip auf dem Server gespeichert ist.

Wie gesagt, ich weiß nicht, ob man das Prinzip überhaupt zum streamen von Audio benutzen kann...
 
Ich habe auch ausprobiert $tfilename den String "stream.m3u" zuzuweisen. Er hat dennoch versucht die Php-Datei zu laden... das Verfahren habe ich in vielen Foren gesehen und es scheint auch zu funktionieren. Werde noch ein wenig herumsurfen und die Lösung - wenn ich denn eine finde - posten.
 
Ich habe mich in anderen Foren umgesehen und mußte leider feststellen, dass ich nicht der einzige mit diesem Problem bin. Der IE 6 unterstützt das Streamen auf diesem Wege nicht. Mit Mozilla soll es allerdings kein Problem sein. Aber eine Lösung zu haben, die nur zum Teil in Browsern funktioniert ist nicht befriedigend. Daher werde ich umdisponieren und eine komplett andere Lösung finden. Vielen Dank an alle die Lösungsvorschläge gemacht haben.
 
Mit einem Javascript sollte es gehen, dann kannst du via HttpXmlRequest eine Anfrage ("Lied_31684132168_xy" an deinen Server senden und der sendet dir den Pfadnamen zurück. Mit dem empfangenen Pfadnamen kannst du einen reload machen und den Pfadnamen ins HTML schreiben.
So bekommst du erst nach einem Klick den gewünschten Pfad zugestellt.
Bei genauen Erleuterungen nur Fragen.
 
Aber dann ist doch sicherlich ein weiterer Klick nötig um die Datei zu streamen oder sehe ich das falsch? Bin echt kein Java-Künstler, wäre also super dankbar, wenn Du mir ein paar Zeilen posten könntest...
 
Wenn ich dich richtig verstanden habe, dann kommt man auf deine Seite, wählt ein Lied aus. Wen es von Gema ist, dann kommt ein Popup mit Werbung. Mann muss auf dieses WerbePopup drücken und so wird das Lied dann geladen. Da dieses Popup deine Gema Lizenzen finanziert, willst du, dass jeder, des dieses Lied hören will, auf das Werbebanner klickt. So kannst du eine Klick-Statistik erstellen. Hoffe das stimmt so.
Nun ist die Frage, wieso den Pfad verstecken willst. Welche überlegenung ist dahintert? Hast du Angst, dass einer im Code herumschnüffelt und nicht dein Werbebanner anklickt?

Nach diesen Fragen kann ich dier ev. Beispiele liefern
 
Es geht im Grunde nur um Perfektion :)
Die Gemagebühr ist fix und wird nicht pro Prelistening-Stream berechnet. Die Klickstatistik ist also nicht entscheidend. Vielmehr geht es darum die Sponsoren dadurch zu bekommen, dass wir Ihnen versprechen können, dass jeder der gemapflichtige Stücke hören möchte auch auf Ihre Seite gehen muss. Die Frage ist dabei natürlich wieviele den Quellcode durchforsten würden um die Seite nicht besuchen zu müssen. Außerdem erscheint zumindest im Windows Media Player der absolute Pfad zur gestreamten Datei. Das habe ich leider aber erst festgestellt nachdem ich dieses Thema gepostet habe.
Wenn es um den Download von Dateien geht - gemapflichtige Stücke wären auf jeden Fall mit Kosten verbunden und daher eine leichte Namensänderung wichtig - ist die Lösung von pdatrain wahrscheinlich völlig ausreichend.
Sollte es aber möglich sein den Pfad nicht im Mediaplayer anzeigen zu lassen, dann wäre es durchaus schön die Perfektion zu betreiben ;)
 
Centrepiece hat gesagt.:
Hey pdatrain,
das geht auf jeden Fall in die richtige Richtung. Habe folgende Sachen geändert:
PHP:
header("Content-Type: audio/x-mpegurl"); 
//es werden nur .m3u-Dateien geladen
header("Content-Disposition: inline; filename=".$tfilename); 
//mit "inline" statt "attachment" umgehe ich die "Öffnen oder Speichern unter"-Box
Soweit so gut. Allerdings kann der Player die Datei nicht abspielen, da er den Dateinamen der php-Datei übermittelt bekommt.
Ich übergebe den absoluten Pfad zur Stream-Datei an $tfilename. Wo ist der Fehler?

Die Variante von pdatrain sollte gehen. als $filename muss kein absoluter Pfad hin. Sondern nur der Name der Datei -> the_muse und dann die Endung der ursprünglichen Datei.
Die Datei wird dann ja unten zugesendet.
Sieht dann so aus
PHP:
$url = $GET['stream']; // oder sonst eine übergebenen Variable
$filename = "/home/to/audio/samples/".$url; // die URL Variable muss noch von "../" und anderen Zugriffen geschützt sein, sonst kann jemand auf deinen Root zugreifen mit einer Übergabe wei $GET['stream'] =  "../../../../config.inc.php" oder andere Dateien
$filesize = filesize($filename); 
if(ereg(".rm", $turl)) header("Content-Type: audio/x-pn-realaudio"); // HEADER erweitern (was immer Du haben willst) 
    else if(ereg(".avi", $turl)) header("Content-Type: video/x-msvideo"); 
    else if(ereg(".mpg", $turl)) header("Content-Type: video/mpeg"); 
    else header("Content-Type: application/x-unknown"); 

    header("Content-Disposition: attachment; filename=" . $tfilename); 
    header("Content-Length: " . $fsize); 

if ($fp = @ fopen($turl, 'r')) 
{ 
    while (!feof($fp) and (connection_status()==0)) 
    { 
        $result = fread($fp, 10240); 
        echo $result; 
        flush(); 
        ob_flush(); 
     } 
   $tstatus = Connection_Aborted(); 
   fclose($fp); 
}
Beachte den Sicherheitshinweis
 
Zurück