Frage

Ich bin eine Datei von einem anderen Server herunterzuladen. Ich wünsche, diese Datei zu meinen Benutzern zu schieben, anstatt es auf meinen Server zu speichern.

Mit anderen Worten, sie die Datei Handle übergeben, damit es passiert einfach durch meinen Server und speichert sie auf ihre Maschine. Wie kann ich das machen? Ich habe dies so weit:

$handle = fopen($_GET['fileURL'], 'r');
$filename = stream_get_contents($handle);

Wie schiebe ich dies den Benutzer, vielleicht Header mit?

Vielen Dank für jede Hilfe und Richtung.

EDIT

Ich habe die Header:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");

Es ist nur, dass es nicht schieben die Header. Ich bekomme nur eine leere Seite nach ca. 15 Sekunden, die wie er die Datei herunterzuladen, aber nicht gibt es mir aussieht.

Ich möchte für das Skript sofort die Header an den Benutzer als Stream senden.     Ausfahrt();

War es hilfreich?

Lösung

Sie können versuchen, diese

$filetype = mime_content_type($filename);
header('Content-type: '.$filetype);
header('Content-Disposition: attachment; filename="'.$filename.'"');

UPDATE für Ihren EDIT:

Haben Sie Fehler deaktiviert haben, da diese, wie die Header-Sounds Fehler bereits gesendet?

error_reporting(E_ALL | E_STRICT);

Andere Tipps

Sie müssen fopen nicht verwenden () bei der Verwendung von Readfile ();

schließen Sie einfach den Dateinamen innerhalb ReadFile- () wie folgt aus:

readfile($_GET['fileUrl']);

Obwohl dies sehr gefährlich sicherheits klug ist, wenn der Benutzer eine beliebige Datei auf dem Dateiserver angeben können. Wenn Sie nur ein paar Dateien haben Sie jemanden zum Download in der Lage sein wollen, vielleicht sollten Sie sie in einem Array speichern (oder Datenbank, preferebly)

Hier ist ein Array Beispiel:

$files = array('file1.jpg', 'file2.png', 'file3.pdf');
//assume $_GET['file_id'] == 0, 1 or 2

if (file_exists($files[$_GET['file_id']]))
    readfile($files[$_GET['file_id']]);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top