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.
header() Umleitung
Einklappen
X
-
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");
}
}
Einen Kommentar schreiben:
-
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?
(bzw. kürzen, so dass du nur einen filenamen im header angibst.)
Einen Kommentar schreiben:
-
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;
}
}
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:
-
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:
-
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:
-
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:
-
und er erfordert die angabe eines kompletten URLs inklusive http://...
Schöner wär's aber wenn das nicht so wär, junge, da wär was los hier im Forum
Einen Kommentar schreiben:
-
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.
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:
-
oder er führt am Anfang des Scripts ein ob_start() aus ... !
Einen Kommentar schreiben:
-
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:
-
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.
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:
-
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($result, 0, 'file');
mysql_query("UPDATE tracks SET clicks = clicks + 1 WHERE id = '".$_GET['id']."'");
header("location: $file");
exit();
}Stichworte: -
Einen Kommentar schreiben: