header() Umleitung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • onemorenerd
    antwortet
    Auf http://php.net/header findest du einige Beispiele. Such dort mal nach Content-Disposition.

    Btw: Erzwingen kannst du gar nichts, weil ich als User mein System einrichten kann wie ich möchte. Wenn mein Browser das zuläßt, kann ich alles was mit http anfängt und auf mp3 endet sofort meinem Lieblingsplayer übergeben.

    Einen Kommentar schreiben:


  • ezkimo
    antwortet
    So ich habe dann jetzt auch mal wieder Zeit für mein kleines privates Projekt gefunden und das Problem nach ganz einfachem Trial and Error auf einfachste Art und Weise gelöst ... zumindest vorübergehend, da ich schon wieder das nächste Problem sehe.

    Lösung des oben genannten Problems:

    PHP-Code:
     // Track downloaden
    if (isset($_GET['id'])) {
        
    $result $db->query("SELECT * FROM tracks WHERE id = '".$_GET['id']."'");
        while (
    mysql_fetch_array($result)) {
            
            
    $db->query("UPDATE tracks SET clicks = clicks + 1 WHERE id = '".$row['id']."'");
            
            
    $file $row['file'];
            
            
    header("Location: $file");
            }

    Es wird einfach nur der Inhalt von $file (./tracks/filename.mp3) übergeben ohne das Script durch exit() zu beenden. Kaum zu glauben ... aber es funktionert. Allerdings wird hier nicht zwingend ein Download ausgeführt. Bei manchen Browsern wird die Datei abgespielt, bei anderen widerum runtergeladen. Gibt es eine Möglichkeit einen Download zu "erzwingen"?

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Original geschrieben von ezkimo
    In der Variablen $row['file'] ist nicht nur der Dateiname, sondern auch der Pfad zur Datei gespeichert. (Beispiel: ../tracks/file.mp3)

    Was kann ich tun?
    das ändern ...?

    (bzw. kürzen, so dass du nur einen filenamen im header angibst.)

    Einen Kommentar schreiben:


  • ezkimo
    antwortet
    So Homies ... da bin ich wieder. Nachdem ich das Problem mit den Headern erfolgreich umgangen habe, und nun eine sehr schöne Template Engine benutze, habe ich immernoch Probleme mit dem header.

    Folgendes soll passieren:

    Ich biete MP3 Files (meine eigenen) zum Download an. Per Click auf einen Link, soll mittels header der Download des Files erzwungen werden. Easy, oder?

    Folgender Code ist vorhanden:

    PHP-Code:
    // Track downloaden
    if (isset($_GET['id'])) {
        
    $result $db->query("SELECT * FROM tracks WHERE id = '".$_GET['id']."'");
        while (
    mysql_fetch_array($result)) {
            
            
    $db->query("UPDATE tracks SET clicks = clicks + 1 WHERE id = '".$row['id']."'");
            
            
    $file $row['file'];
            
                    
    header("Content-Disposition: attachment; filename=".$row['file']);
            
    header("Content-Type: application/force-download");
            exit;
            }

    Was passiert?
    Nüscht! Zumindest nicht das, was eigentlich gewollt ist. Nämlich der Download des MP3 Files. Stattdessen kann man aber die php Datei runterladen.

    Wo könnte das Problem liegen?
    In der Variablen $row['file'] ist nicht nur der Dateiname, sondern auch der Pfad zur Datei gespeichert. (Beispiel: ../tracks/file.mp3)

    Was kann ich tun?

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Goth hat es doch schon erwähnt:
    wenn man die ausgabe zuerst puffert, dann kann man im ganzen script "headern" nach lust und laune.
    (ist aber idR. nicht empfehlenswert, und insb. nicht für anfänger, die sich dann noch weniger gezwungen sehen, auf eine halbwegs ordentliche struktur ihrer scripte zu achten ...)

    Einen Kommentar schreiben:


  • Quetschi
    antwortet
    Hab irgendwie den Verdacht, dass die da eh auch nicht funktionieren, aber vielleicht sind bei XAMPP die Error_level so 'weich' eingestellt, das quasi alles erlaubt ist, was eigentlich verboten sein sollte.

    Einen Kommentar schreiben:


  • ezkimo
    antwortet
    Okay ... dann habe ich wohl was falsch verstanden. Danke für die Aufklärung.

    Werde mich weiter durch's Manual schlagen und die erwähnten Befehle anwenden. Ddanke ncohmal für die Hilfe.

    Achso nochwas: Kann mir jemand erklären, wieso die header Befehler lokal (XAMPP) funktionieren?

    Einen Kommentar schreiben:


  • Quetschi
    antwortet
    und er erfordert die angabe eines kompletten URLs inklusive http://...
    Ist so natürlich absolut richtig, trotzdem akzeptiert der größte Teil der Browser relative Angaben.

    Schöner wär's aber wenn das nicht so wär, junge, da wär was los hier im Forum

    Einen Kommentar schreiben:


  • wahsaga
    antwortet
    Re: header() Umleitung

    Original geschrieben von ezkimo
    Im Manual und in diversen Büchern steht, dass die Anweisung header() generell immer am Anfang einer Datei (vor dem HTML Code) stehen muss. Die header('Location: ') Anweisung wäre aber eine Ausname.
    absoluter unfug.
    wo bitte soll derartiger nonsense stehen?

    auch vor einem location-header dürfen keinerlei ausgaben erfolgt sein.
    und er erfordert die angabe eines kompletten URLs inklusive http://...

    Einen Kommentar schreiben:


  • goth
    antwortet
    oder er führt am Anfang des Scripts ein ob_start() aus ... !

    Einen Kommentar schreiben:


  • magman
    antwortet
    Die header Funktion muss definitiv vor irgend einer Ausgabe erfolgen! Desshalb funktioniert es bei dir nicht!

    Du hast entweder die Möglichkeit mittels eines "meta refresh" eine Weiterleitung nach einer bestimmten Zeit zu bewirken, oder alle Ausgaben vor dem header() entfernen!

    Einen Kommentar schreiben:


  • goth
    antwortet
    Re: header() Umleitung

    Original geschrieben von ezkimo
    Im Manual und in diversen Büchern steht, dass die Anweisung header() generell immer am Anfang einer Datei (vor dem HTML Code) stehen muss. Die header('Location: ') Anweisung wäre aber eine Ausname. Es ist eben nur eine Weiterleitung.
    Ich welcher Übersetzung steht das denn ... Suaheli ... weder im Deutschen noch im Englischen Manual ist so eine Aussage zu finden ... !

    Die dort erwähnte Ausnahme bezieht sich lediglich auf den Umstand, dass, so ein Location-Header gesendet wird automatisch ein Statuscode 302 Verwendung findet ... !

    Einen Kommentar schreiben:


  • ezkimo
    hat ein Thema erstellt header() Umleitung.

    header() Umleitung

    Folgendes Problem:

    Ich habe ein Script geschrieben, welches es ermöglichen soll, Dateien runterzuladen. Der Name der Datei wird aus einer Datenbank gelesen und mittels header("Location: $file"); übergeben.

    Auch alle anderen header Anweisungen in anderen Dateien funktionieren nicht. Wer möchte kann ja mal reinschauen. Psykonaut Records (Seite befindet sich noch in der Entwicklung)

    Im Manual und in diversen Büchern steht, dass die Anweisung header() generell immer am Anfang einer Datei (vor dem HTML Code) stehen muss. Die header('Location: ') Anweisung wäre aber eine Ausname. Es ist eben nur eine Weiterleitung.

    Hier das Codebeispiel:

    PHP-Code:
    ...
    <td>
        Filesize: {$row['file']} bytes<br />
        Downloads: {$row['clicks']}<br />
        Average Rating: {$row['rating']} [votes: {$row['rate_count']}]<br /><br />
        [ <a href=\"./tracks_download.php?id={$row['id']}\">Download this track</a> ]<br />
        <br />
    </td>
    .
    .
    .
    <?php
    if (isset($_GET['id'])) {
        
    $result mysql_query("SELECT file FROM tracks WHERE id = '".$_GET['id']."'");
        
    $file mysql_result($result0'file');
        
    mysql_query("UPDATE tracks SET clicks = clicks + 1 WHERE id = '".$_GET['id']."'");
        
        
    header("location: $file");
        exit();
    }
    Der Code befindet sich in der selben Datei. Es wird also keine Template Klasse verwendet. Wie kann ich es trotz HTML verwirklichen, dass der header Befehl arbeitet und somit der Download funktioniert?
Lädt...
X