2009-07-01 9 views
0

Ich frage mich, ob es in PHP eine Möglichkeit gab, einen externen Download an einen Benutzer zu übergeben? Was ich mit dem Skript machen möchte, hängt von bestimmten Bedingungen ab, sende dem Benutzer eine Datei von Server A oder Server B. Ich möchte jedoch nicht, dass der Benutzer die direkte URL zu einem der beiden Server weiß.PHP Pass externen Download an Benutzer

Ex: Nutzer besucht (die auf Server C): http://example.com/download?id=1234 Server A Adresse der Datei: http://servera.com/1234.exe Server B Adresse der Datei: http://serverb.com/1234.exe

Gibt es eine Möglichkeit, dass, wenn jemand besucht http://example.com/download?id=1234, zu Senden Sie ihnen den Download der anderen Server, ohne dem Benutzer die direkte URL zu geben? Ich weiß, dass ich eine Datei machen kann ([externe Datei hier]). Aber ich tun nicht wollen die gesamte Bandbreite durch Server C. Server C ist so ziemlich nur eine Weiterleitung.

Danke, James

Antwort

2

Der Client auf einer bestimmten Ebene wissen müssen, welche Server sie herunterladen, sonst wären sie nicht in der Lage sein, um es zu verbinden.

EDIT:

Wenn Sie ändern nicht die Adressleiste des Browsers möchten, können Sie versuchen, die Content-disposition Header wie so mit:

header("Content-disposition: attachment;filename=1234.exe"); 
//then output the file contents 

Hinweis: Diese PHP-Skript zu sein hat auf Server A und Server B. Daher wird Server C entweder zu http://servera.com/download.php oder http://serverb.com/download.php umleiten.

+0

Ja, ich verstehe das, aber kann ich dies über Header tun, so dass ein durchschnittlicher Benutzer sehen kann? –

+0

Als Sicherheitsmerkmal wird (oder sollte) der Browser dem Benutzer immer mitteilen, von welchem ​​Server er eine Datei herunterlädt. –

+1

Das heißt, wenn Sie die Datei über PHP pipe und einen Header "Content-disposition" geben, wird der Browser die Adressleiste wahrscheinlich nicht aktualisieren. –

0

hum

Unter Umständen können Sie durch NAT oder einen Proxy verwenden. Aber das wird sehr schwierig werden.

Nur durch Ändern der Header wird es wahrscheinlich nicht funktionieren.

EDIT: Nein, ich denke, Sie müssten einen Proxy für alle Ihre Server auf einmal hinzufügen (z. B. Gateway).

+0

Wie könnte ich einen Proxy über Apache mit mod_proxy tun? Das würde immer noch die Bandbreite auf Server C verwenden. –