FTP-Download mit PHP zum Client

GiFt-ZwErG

Erfahrenes Mitglied
Hallo,

ich habe folgendes Script:

PHP:
<?php
// Vars
$ftp_server = "";
$benutzername = "";
$passwort = "";

// Die Verbindung herstellen
$connection_id = ftp_connect("$ftp_server");

// Mit Benutzername und Kennwort anmelden
$login_result = ftp_login($connection_id, "$benutzername", "$passwort");

// überprüfen ob alles gutgegangen ist
if ((!$connection_id) || (!$login_result)) {
	echo "<H1>Ftp-Verbindung nicht hergestellt!<H1>";
	echo "<p>Verbindung mit ftp_server
	als Benutzer $benutzername nicht möglich!</p>";

	die;
} else {
	echo "<p>Verbunden mit ftp_server als Benutzer $benutzername </p>";
}
echo "Aktuelles Verzeichnis: " . ftp_pwd($connection_id) . "\n";

// Ins Verzeichnis "downloads" wechseln
if (ftp_chdir($connection_id, "downloads")) {
    echo "Aktuelles Verzeichnis: " . ftp_pwd($connection_id) . "\n";
} else { 
    echo "Verzeichnis-Wechsel ist fehlgeschlagen.\n";
}

$name = "test.zip";

$newfile=ftp_get($connection_id,$name,$name,FTP_ASCII);
echo $newfile;

// Schließen der Verbindung
ftp_quit($connection_id);
?>

Es funktioniert alles perfekt ( Verbindung, Verzeichnisswechsel usw ).
Mein Problem ist, dass ich die Datei nicht auf dem Server speichern möchte, sondern diesen zum Client weiterleiten möchte.

Ich habe 2 Server, auf dem ersten läuft meine Seite und auf dem zweiten liegen die Downloads die per Web nicht erreichbar sind ( absichtlich ).
Nun möchte ich Deeplinks ( Direktlinks zu meinen Files ) verhindern und die Downloads über ein Script realiesieren, welches eine FTPVerbindung aufbaut ( PW und USERNAME ) und die Datei dann nicht lokal speichert sonder der Client diese downloaden kann.
Ich habe keine Ahnung ob der Traffic für den Download dann auch für den Server besteht oder ob man den DL komplett umleiten kann.

Hat evtl jemand einen Lösungsansatz oder eine alternative?
Auf jedenfall bleiben die Downloads auf einem Server der nur per FTP erreichbar ist.
Wie kann ich den Direktlink zum Download am besten verstecken?

Danke für die Antworten. ( Werden gerne bewertet ;) )

MFG
Sandro
 
Hallo,

Warum einfach, wenns auch Kompliziert geht ;) Dazu fällt mir dieses sprichwort ein.

Wieso 2 Server ? Du kannst die Downloaddateien außerhalb der zuständigkeit von apache speichern. z.b. http://www.test.de zeigt den inhalt von /wasauchimmer/htdocs und die downloadfiles könnten dann in /wasauchimmer/downloads liegen. Da apache nur die Files auf htdocs lesen kann, können user nicht direkt auf die downloads zugreifen. Im php skirpt gibst du einfach ein pfad an (Wo die datei sich befindet) und schickst es dann direkt über das skirpt an den clienten.

MfG
Xacko
 
Da ich aber eine extra subdomain für die downloads habe, und diese in vhosts/subdomain liegt, müsste ich von meiner Domain aus httpdocs raus, dann aus dem BASEDIR raus ( das geht schonma nicht wegen SafeMode ) und dann in vhosts/subdomain/downloads rein...


MFG
Sandro
 
Hi weiß nicht obs funktioniert aber ich würds zumindest mal so probiern:

-durch irgend eine Auswahl des Users (weiß ja nicht was du vor hast) wird ein Script in einem neuen Fenster aufgerufen
- in siesem Script musst du wissen welche datei heruntergeladen werden soll - du machst das dann mit deinem ftp script (soweit warst du ja schon)
- diese Datei speicherst du aber nicht, sondern liest sie aus und gibst sie wieder - du musst halt eventuell den entsprechneden header setzen
- mit dem header "header("Content-Type: application/force-download"); " zwingst du den browser dann die Datei herunterzuladen.
 
Warum nicht einfach ein den Ordner downloads per .htaccess schützen?
Code:
deny from all
PHP kann dann trotzdem darauf zugreifen, aber die Dateien sind vor direktem Aufruf geschützt.
 
Danke mAu... finde die alternative echt gut... werde sie mir mal anschauen.
@Hans_Jörg: Entsteht der Traffic dann für den Server worauf die Page läuft oder nur für den Server wovon der Download aus läuft?

MFG
Sandro
 
Traffic entsteht für beide Server. Logisch, weil der eine Server die Datei ja einlesen muss und der andere muss sie schicken. Server1 schickt sie an Server2 der schickt sie an Benutzer... Also Traffic zwischen 1 und 2 und zwischen 2 und Benutzer.
 

Neue Beiträge

Zurück