Browser Downloadfenster...

easyJoe

Grünschnabel
Hallo an alle im Forum,

folgendes ist mein leidiges problem(Seit eingen Stunden).
Mit Flash übergebe ich eine Variable (PictPath) an dieses PHP Skript.
PictPath ist z.B.: picts/08.09.06/1.jpg

<?php
$filename = "/$PictPath";
$saveasname = basename($filename);
$filesize = filesize($filename);

header("Location: $filename");
header("Content-type: application/force-download");
header("Content-Disposition: attachment; filename=$saveasname");
header("Content-Length: ".filesize($filename));
readfile($filename);
exit;

?>

Nur leider passiert garnix! Nix. Vorallem kein Downloadfenster meines Browsers! :(
Bitte um hilfe! Was ist am Code falsch?
 
Probier mal folgendes aus:

Diese Zeilen müssen raus:

PHP:
header("Location: $filename");
PHP:
exit;

Mit header("Location: irgendwo"); redirectest du doch den Benutzer der Site (im Endeffekt).

Ändere diese Zeile:

PHP:
   header("Content-type: application/force-download");

in das hier um:

PHP:
header("Content-type: application/octet-stream");

Das würde dann für so ziemlich alle möglichen Daten zutreffen. Das Problem bei force-download ist, dass es oftmals von den Browsern nicht erkannt wird bzw. interpretiert werden kann (insbesondere ist hier der Internet-Explorer zu nennen).

Wenn du weisst, dass es immer jpg-Bilder sind:

PHP:
header("Content-type: image/jpeg");

Füge folgendes hinzu:

PHP:
header('Expires: 0');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
 
Zuletzt bearbeitet:
danke für deine gut geschilderte hilfe! top :)

Mein Skript sieht jetzt wie folgt aus. Aber, es tut sich gar nichts :(
PictPath ist die Variable die von Flash übergeben wird.
Das skript wird startet, die Variable von Flash wird auch richtig übergeben.
aber es kommt keinerlei raktion auf diesen code.
kein Downloadfenster des Browser das mich fragt wo und ob ich das Bild speichern möchte... Schluchtz... :(


<?php
$filename = $PictPath;
$saveasname = basename($filename);
$filesize = filesize($filename);


header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=$saveasname");
header("Content-Length: ".filesize($filename));
Header("Expires: 0");
Header("Cache-Control: no-cache, no-store, must-revalidate");
Header("Pragma: no-cache");
readfile($filename);
exit;
?>
 
Versuch wirklich nochmal das

PHP:
exit;

rauszunehmen :)

Ansonsten sieht die Sache natürlich schon ganz anders aus wenn du sagst, dass die php-Datei aus Flash aus aufgerufen wird.

Natürlich wird die php-Datei "ganz normal" aufgerufen. Jedoch kann ich mir nicht vorstellen, dass das Download-Fenster dadurch aufpoppt. Ich kann mich dran erinnern, dass ich schonmal ähnliches versucht habe. Bei mir war es nur so, dass ich ein Fenster öffnen wollte.

Das Problem dabei ist, dass das Downloadfenster quasi kein Elternfenster hat in dem es aufpoppen könnte (mal einfach ausgedrückt).

Ich würde dir empfehlen mal zu probieren die php-Datei ganz normal im Browser aufzurufen und die benötigten Variablen mit zu übergeben. Kommt dann dein Downloadfenster?

Wenn das dann klappt, rate ich dir zu folgender Lösung in Flash:

Code:
deinMC.pictpath = "pfad/zum/bild.jpg";

deinMC.onRelease = function() {

    getURL("pfad/zum/php/script.php","_blank","GET");
};

Damit öffnest du auf Klick auf einen MC ein neues Fenster in dem die PHP-Datei aufgerufen und die Variable 'pictpath' des MovieClips dann via GET übermittelt wird (wie als wenn du es manuell machen würdest wie oben beschrieben).

PS: Wenn du die Variable $PictPath übergeben bekommst, dann nutze am Besten auch das dazugehörige globale Array. Also via GET ist es dann:

PHP:
$filename = $_GET["PictPath"];

und via POST:

PHP:
$filename = $_POST["PictPath"];

Guts Nächtle nun erstmal ;)

Stephan
 
Probier mal Folgendes:
PHP:
<?php

	if( !is_readable($_GET['PictPath']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
		exit;
	}

	$headerFields = array(
		'Content-Type'        => 'image/jpeg',
		'Content-Disposition' => 'attachment; filename="'.basename($_GET['PictPath']).'"',
		'Content-Length'      => filesize($filename),
		'Expires'             => 0,
		'Cache-Control'       => 'no-cache, no-store, must-revalidate',
		'Pragma'              => 'no-cache',
	);

	if( !header_sent() ) {
		foreach( $headerFields as $name => $value ) {
			header($name.': '.$value);
		}
	}
	readfile($_GET['PictPath']);
	exit;

?>
 
easyJoe hat gesagt.:
header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=$saveasname");
header("Content-Length: ".filesize($filename));
Header("Expires: 0");
Header("Cache-Control: no-cache, no-store, must-revalidate");
Header("Pragma: no-cache");
readfile($filename);
exit;
?>

Muß der header() nicht klein geschrieben werden
Du hast es 3x so - Header

Ich habe es bei mir mal getestet weil ich gerade auch so ein Downloadfenster benötige. Bei mir klappt es zwar aber die Datei ist immer leer.
 
Funktionsnamen sind in PHP unabhängig von Groß- und Kleinschreibung, dennoch ist es sinnvoll, sie so aufzurufen wie sie definiert wurden.
 
Hi,

mein Download funktioniert nun - hab nur noch 1 Problem!

mein Code ist nun folgender:
Code:
$filename = $_SERVER["DOCUMENT_ROOT"].$result->f("pic");
$save_as_name = basename($filename);
$size = getimagesize($filename);
$filesize = filesize($filename);
header("Content-type: {$size['mime']}");
header("Content-Disposition: attachment; filename=$save_as_name");
header("Content-Length: ".filesize($filename));
header("Expires: 0");
header("Cache-Control: no-cache, no-store, must-revalidate");
//header("Pragma: no-cache");
readfile($filename);

Wenn ich im Downloadfenster auf "speichern" klicke kann ich es speichern. Klicke ich auf "öffnen" wird die Datei gezogen aber das dafür vorgesehene Programm öffnet sich nicht. Bei einem Bild kommt gar nix. Bei einer Videodatei (anderer Mimetype, etwas anderer Code) öffnet sich zwar der Mediaplayer aber er meldet folgendes:

Windows Media Player kann die angegebene Datei nicht finden. Stellen Sie sicher, dass der Pfad richtig angegeben wurde. Möglicherweise ist die Datei am angegebenen Ort nicht mehr vorhanden, oder der Computer, auf dem die Datei gespeichert ist, ist zurzeit offline.

Weiß wer Rat?

EDIT:
es lag natürlich am header("Pragma: no-cache");
und bei videos muß auch header("Cache-Control: no-cache, no-store, must-revalidate"); weg
 
Zuletzt bearbeitet:
Du hast recht - habe den
Code:
header("Pragma: no-cache");
header("Cache-Control: no-cache, no-store, must-revalidate");
wieder reingenommen und das Feld

Code:
header("Content-type: {$size['mime']}");

in

Code:
header("Content-type: ".$size["mime"]."");

geändert. Es funktioniert!

Mein Code für Videos sieht nun so aus und funktioniert:
Code:
$path_parts = pathinfo($filename);
if($path_parts["extension"] == "mov" || $path_parts["extension"] == "qt") {
$mime_type = "video/quicktime";
} elseif($path_parts["extension"] == "mpeg" || $path_parts["extension"] == "mpg" || $path_parts["extension"] == "mpe") {
$mime_type = "video/mpeg";
}
header("Content-type: ".$mime_type."");
header("Content-Disposition: attachment; filename=$save_as_name");
header("Content-Length: ".filesize($filename));
header("Expires: 0");
header("Cache-Control: no-cache, no-store, must-revalidate");
header("Pragma: no-cache");
 
Zuletzt bearbeitet:
Zurück