Upload-Dateien auf mehrere Server verteilen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Upload-Dateien auf mehrere Server verteilen

    Hey,

    ich wollte mal in Runde fragen wie ihr folgendes Szenario lösen würdet.

    Ich habe 3 Server:
    - Server 1: Applikationsserver (Hier läuft die eigentliche Webseite)
    - Server 2: Datenbank-Server (Hier läuft die MySQL-DB)
    - Server 3: Dateiserver (Hier werden alle hochgeladenen Dateien gelagert)

    Nun befindet sich ein User auf dem Server 1 (eigentliche Webseite) und will über ein Formular diverse Daten eingeben und eine Datei hochladen. Wichtig ist hierbei, dass die Logik ja eigentlich auf dem Server 1 läuft.
    Die hochgeladene Datei soll nun auf dem Server 3. Hier im action="" des Form-Tags den Server 3 angeben ist logisch quatsch, da die Webseite unabhängig auf Server 1 liegt und auch bleiben soll.

    Was gibt es für Methoden die Datei ohne große Last auf Server 3 zu bekommen.

    Ich hatte mir überlegt, per Job und SSH die Dateien im Nachhinein auf den Server 3 zu kopieren.

    Wie machen das die großen Seiten, wie Facebook oder die ganzen Filehoster?

    Danke.

  • #2
    Huhu TriphunEM,

    teste mal folgendes!
    Verbindungsaufbau

    Für die Kommunikation mit einem FTP Server muss zunächst einmal eine Verbindung hergestellt werden. Als Rückgabe erhält man eine Verbindungs-ID, die für alle weiteren FTP Befehle benötigt wird.
    [COLOR=#000088]$cid[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#990000]ftp_connect[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"ftp.host.de"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    Um zu überprüfen, ob die Verbindung hergestellt wurde, lässt sich eine einfache If-Abfrage verwenden:
    [COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#b1b100]echo[/COLOR] [COLOR=#0000ff]"OK"[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#b1b100]else[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#b1b100]echo[/COLOR] [COLOR=#0000ff]"Connection error"[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR]
    Steht die Verbindung, so müssen zunächst die Logindaten an den FTP Server gesendet werden. Dies ist auch nötig, wenn z.B. kein Passwort benötigt wird. In diesem Fall erwarten die meisten FTP Server eine beliebige E-Mail Adresse als Passwort.
    [COLOR=#000088]$login[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#990000]ftp_login[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$user[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$passwort[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    Ein erfolgreicher Login lässt sich, wie bereits oben anhand der Verbindungs-ID beschrieben, überprüfen. Dies ist auch dringend zu empfehlen, da sonst alle weiteren Befehle vom Server abgewiesen werden.
    Wichtige FTP Befehle von PHP

    Nach Verbindungsaufbau und Login stehen einem viele FTP Kommandos zur Verfügung, die wichtigsten werde ich kurz vorstellen:
    [COLOR=#666666]//Verzeichnis erstellen[/COLOR] [COLOR=#990000]ftp_mkdir[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$remote_dir[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666]//Verzeichnis löschen[/COLOR] [COLOR=#990000]ftp_rmdir[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$remote_dir[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666]//Datei auf FTP-Server hochladen[/COLOR] [COLOR=#990000]ftp_put[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$local_file[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$remode_file[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$modus[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666]//Datei von FTP-Server herrunterladen[/COLOR] [COLOR=#990000]ftp_get[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$local_file[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$remote_file[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$modus[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#666666]//FTP-Verbindung schließen[/COLOR] [COLOR=#990000]ftp_close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR]
    Alle Befehle erwarten als ersten Parameter die Verbindungs-ID und sind vom Typ bool, somit lässt sich der Erfolg des Befehls direkt in einer If-Abfrage prüfen. Bei Übertragungen muss neben den Dateien außerdem der Übertragungsmodus festlegen. In der Regel ist dies FTP_ASCII für Text- und Quelltextdateien. Gerade bei verschlüsselten Daten, ausführbaren Dateien oder gepackten Daten muss jedoch FTP_BINARY verwendet werden.
    Beispielcode

    Zum Abschluss dieses Artikels hier noch ein kleines Beispielprogramm:
    [COLOR=#000088]$cid[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#990000]ftp_connect[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"ftp.host.de"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#990000]die[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Verbindungsfehler!"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#000088]$login[/COLOR] [COLOR=#339933]=[/COLOR] [COLOR=#990000]ftp_login[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$user[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#000088]$passwort[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR][COLOR=#000088]$login[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#990000]die[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Login Error!"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#666666]//In Verzeichnis "upload" wechseln[/COLOR] [COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#339933]![/COLOR][COLOR=#990000]ftp_chdir[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#0000ff]"upload"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#990000]die[/COLOR][COLOR=#009900]([/COLOR][COLOR=#0000ff]"Verzeichniswechsel fehlgeschlagen!"[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#666666]//Datei "myfile.txt" herrunterladen, hierbei liegt "myfile.txt" auf dem FTP Server im[/COLOR] [COLOR=#666666]//Verzeichnis "upload" und wird in das gleiche Verzeichnis gespeichert, aus dem [/COLOR] [COLOR=#666666]//dieses FTP Skript aufgerufen wird. Wichtig ist hierbei, dass PHP Schreibrechte[/COLOR] [COLOR=#666666]//für das Verzeichnis hat, indem das FTP Skript liegt.[/COLOR] [COLOR=#b1b100]if[/COLOR][COLOR=#009900]([/COLOR][COLOR=#990000]ftp_get[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#0000ff]"myfile.txt"[/COLOR][COLOR=#339933],[/COLOR] [COLOR=#0000ff]"myfile.txt"[/COLOR][COLOR=#339933],[/COLOR] FTP_ASCII[COLOR=#009900])[/COLOR][COLOR=#009900])[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#b1b100]echo[/COLOR] [COLOR=#0000ff]"Übertragung erfolgreich!"[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#b1b100]else[/COLOR] [COLOR=#009900]{[/COLOR] [COLOR=#b1b100]echo[/COLOR] [COLOR=#0000ff]"Übertragungsfehler!"[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#009900]}[/COLOR] [COLOR=#666666]//Verbindung trennen[/COLOR] [COLOR=#990000]ftp_close[/COLOR][COLOR=#009900]([/COLOR][COLOR=#000088]$cid[/COLOR][COLOR=#009900])[/COLOR][COLOR=#339933];[/COLOR] [COLOR=#b1b100]echo[/COLOR] [COLOR=#0000ff]"FTP Verbindung geschlossen!"[/COLOR][COLOR=#339933];


    [COLOR=Black][FONT=Arial]Quelle: [/FONT][/COLOR][COLOR=Black][FONT=Arial]http://www.phpmaniac.de/php_blog/code-schnipsel/ftp-verbindungen-mit-php/[/FONT][/COLOR]
    [/COLOR]

    Kommentar


    • #3
      Naja, die Daten erst auf dem Server laden und dann per FTP woanders hin, kann nicht die Lösung sein. Ich finde da kommt der Server bei großer Belastung zu sehr ins schwitzen, außerdem dauert das zu lang!
      Da ist der Ansatz, auf dem Fileserver per SSH bzw. SFTP die Daten vom Applikationsserver holen schone eine bessere Lösung, allerdings weiß ich nicht ob es da noch sinnvollere Lösungen gibt!?

      Kommentar

      Lädt...
      X