Update Funktion mit Datenübertragung von Server zu Server

qsrs

Erfahrenes Mitglied
Hallo,

ich habe vor, eine Update-Funktion für ein Skript anzubieten. Das Skript kann der User auf seinem Webspace installieren. Ich würde dann das Updates als ZIP-Datei auf meinem Server zur Verfügung stellen, und kann diesen bzgl. Rechte ohne Einschränkungen einstellen. Die ZIP-Datei soll dann von meinem Server auf den, auf dem das Skrip läuft, übertragen werden. Ist es da, wird es entpackt. Dann startet das Update.

Nun die Frage, wie verbinde ich zu meinem Server und lade die Datei von diesem zum anderen, wie ist der Verbindungsaufbau, wie realisiere ich den Kopiervorgang? Wie prüfe ich, ob die Datei angekommen ist? Das darauffolgende Update kann ich selbst realisieren, das ist nicht das Problem. Es geht um die o.g. Fragen, also Verbindung, Kopiervorgang, prüfen, ob die Datei angekommen ist. Ich freue mich über jede Hilfe. Vielen Dank schon im Voraus.
 
Ahoi hoi,

hierfür gibt es natürlich viele viele viele wege ^^ (wie fast überall)
der einfachste der mir im Moment einfällt ist der -- das update (zip-datei) stellst du via HTTP zum Download bereit (z.B. http://www.deinserver.de/update.zip)

Wenn deine User den URL-Wrapper aktiviert haben (ist zwar nicht ganz sicher, aber ganz praktisch manchmal) kannst du in deiner update.php folgendes schreiben

PHP:
$fp_update = fopen("http://www.deinserver.de/update.zip","r");
$buffer = "";
while(!feof($fp_update)) $buffer .= fread($fp,1024);
$fp = fopen("gespeichertes_zip.zip","w");
fwrite($buffer);
fclose($fp_update);
fclose($fp);

Wenn der URL-Wrapper nicht zur Verfügung gestellt wird, kannst du das ganze noch mit fsockopen probieren und einfach HTTP-Commands senden.
 
Vielen Dank für diese Variante. Ich werde das versuchen. Allerdings ist mir etwas wichtiges eingefallen, was ich nicht erwähnt habe. Die ZIP-Datei wird auf meinem Server dynamisch erzeugt, mit der PclZip-Library. D.h. ich müsste von einem fremden Server einen Aufruf des Skriptes starten, der diese ZIP-Datei auf meinem Server erzeugt, und erst dann die Übertragung erfolgt. Wie kann ich also den Aufruf eines Skriptes auf meinem Server von einem fremden aus veranlassen?
 
Also ich muss es vielleicht doch noch einmal anders beschreiben. Es geht im Prinzip um eine Updatefunktion, die direkt von einem auf den anderen Server funktionieren soll.

Das heißt, das Skript soll auf einem fremden Server laufen, das Update liegt auf meinem Server. Der Vorgang sollte so aussehen:

1. Der User kann über eine im Skript eingebrachte Funktion prüfen, ob sich ein Update auf meinem Server befindet - Dazu muss ein Aufruf von seinem Server kommen, der dann seine Versionsnummer des Skriptes an meinen Server übertragen soll - der User soll aber seine Seite nicht verlassen - also die Daten nicht per Post übertragen - hier ist die erste Frage also, wie kann ich die Daten ohne Post an meinen Server übergeben

2. Wenn die Daten (Versionsnummer und ein Authentifizierungsschlüssel) übergeben werden, soll ein Skript auf meinem Server starten, der eine ZIP-Datei generiert (das kann ich selbst umsetzen, meine Frage bezieht sich hierbei darauf, wie ich es vom fremden Server auf meinem Server starten kann)

3. Die generierte ZIP-Datei soll dann an den fremden Server übertragen werden und es soll geprüft werden, ob die Datei angekommen ist. Dann startet das Update (auch das kann ich selbst umsetzen)

Würde das technisch überhaupt funktionieren? Ich weiß, dass es einige CMS gibt, die eine direkte Updatefunktion unterstützen. Also denke ich es funktioniert. Ich habe nur keinen Ansatz, wie genau. Ich würde mich über Tipps und Anregungen sehr freuen.
 
Zuletzt bearbeitet:
Hm....

also wenn ich das realisieren müsste, würde ich mich mit der "cURL" Erweiterung auseinandersetzen. Ich weiß allerdings nicht ob das sinn macht, denn es können ja nicht alle die cURL extension auf ihrem server aktivieren.

An deiner Stelle würde ich es einfacher halten:

1. Du hast einen RSS Feed auf deiner Seite mit den neuesten Versionen.

2. Der User bekommt eine Email, wenn eine neue Version draussen ist.

3. Sein Script zeigt ihm mit einer RSS Klasse (fetch_rss) im Adminpanel an, dass eine neue Version erschienen ist und gibt ihm einen Link

4. Dieser Link besteht aus seinem persöhnlichem Kundenhash und der versionsnummer und leitet dadurch direkt zum download

5. User muss nur noch zip entpacken und überschreiben.

Ich halte davon mehr, weil nicht jeder immer einen Update möchte. Denn wenn er sich z.B. Add-Ons gebastelt hat, sind die vielleicht durch Autoupdates weg. Da wäre ich als Kunde sehr sauer.

Gruß suf*****
 
Das Ganze lässt sich eigentlich mit einer HTTP-Anfrage abwickeln: Der Client (also der Webserver, der das Update anfordert) sendet eine am besten verschlüsselte POST-Anfrage an den Server (dein Webserver, der das Update zur Verfügung stellt). Ist die Anfrage …
  • authentisch und eine neuere Version verfügbar, sendet der Server den Statuscode 200 und direkt die Daten und dem MD5-Hashwert im „Content-MD5“-Header-Feld.
  • authentisch jedoch keine neuere Version verfügbar, sendet der Server den Statuscode 304.
  • nicht authentisch, sendet der Server den Statuscode 403.
Anhand des gesendeten Statuscodes kann der Client nun weiteres Vorgehen entscheiden. Wurde die Anfrage …
  • akzeptiert und es werden Daten übermittelt (Statuscode 200), kann der Client diese in einer Daten speichern und anschließend die Integrität dieser anhand des MD5-Hashwerts prüfen.
  • abgelehnt, kann je nach Statuscode eine Fehlermeldung ausgegeben werden.
 
du könntest das ganze auch mit exec(); system() und den dazugehörigen systembefehlen lösen.

da weißt du aber auch wieder nicht genau wir der server reagiert.

Meine Meinung nach solltest du einfach den User downloaden lassen aus den Gründen die ich oben genannt habe
 
Erst einmal danke an alle für die Antworten.
Das Ganze lässt sich eigentlich mit einer HTTP-Anfrage abwickeln: Der Client sendet eine am besten verschlüsselte POST-Anfrage an den Server

Wie würde denn eine verschlüsselte POST-Anfrage aussehen, ohne die eigene Seite zu verlassen. Ich benötige keine komplette Lösung, das würde ich gar nicht erwarten, nur evtl. einen Ansatz, da ich es mir noch nicht richtig vorstellen kann, mit welchen PHP-Funktionen ich es umsetzen muss. Benötige ich hierzu die http_post_data-Funktion? Wie sieht die Kommunikation zwischen den beiden Servern denn konkret aus?
 
Am besten waeren folgende Voraussetzungen:
Sendender Server:
PHP mit SSL-Support

Empfangender Server:
Apache mit SSL

Dann kannst Du z.B. meine HTTP-Klasse nutzen und ueber HTTPS (HTTP+SSL-Verschluesselung) die Daten uebertragen.

Falls auf einer der beiden Seiten SSL fehlen sollte geht es natuerlich auch unverschluesselt, nur solltest Du, je nach Art der Daten, davon evtl. absehen.
 
Zurück