template
Index :: PHP/MySQL :: Webserver: Datentransfer
In unserem Szenario gibt es einen Webserver Alpha (der Daten besitzt und liefern kann) sowie einen Webserver Beta (der die Daten braucht und speichern will).
Die Initiative des Transfers kann von beiden Webservern ausgehen, je nachdem, ob die Daten geholt oder geschickt werden:
Diese Art des Transfers wird meist aus folgenden Gründen gewählt:
- Im Internet ist es weitaus einfacher, Daten zu holen als sie zu schicken.
- Am Ziel Beta muss eventuell eine spezielle Weiterleitung (in einen geschützten Bereich oder eine Datenbank) erfolgen, wozu die Gegenstelle Alpha nicht in der Lage ist.
- Es ist kein aktiver Sender (z.B. PHP/CGI-Skript) erforderlich. Im Webpfad von Alpha kann direkt auf jede Datei zugegriffen werden.
Im folgenden Beispiel lesen wir die Daten nicht aus einer passiven Alpha-Datei, sondern wir rufen ein Alpha-Skript, das uns die Daten liefern soll.
Unser offensives Skript auf Webserver Beta könnte sich z.B. so die Information der ID 3 beschaffen:
$data = "";
if ($fh = fopen("http://alpha.com/serve.php?id=3", "rb")) {
while (!feof($fh)) $data .= fread($fh, 1024);
fclose($fh);
}
Dadurch stünden die Daten in der Variablen $data zur Verfügung.
Der Lieferant, Skript serve.php auf Webserver Alpha (http://alpha.com) könnte so aussehen:
<?php
switch (intval($_GET['id'])) {
case 1: echo "Information 1"; break;
case 2: echo "Information 2"; break;
case 3: echo "Information 3"; break;
default: echo "Unbekannte ID";
}
?>
In der Praxis würden die Daten aus einer Datei (evtl. gestreamt) oder einer Datenbank kommen.
Das Schicken von Daten setzt voraus, dass auf beiden Seiten ein entsprechendes Skript vorliegt:
- Webserver Alpha: HTML-Formular zum Senden.
- Webserver Beta: PHP-Skript zum Empfangen und Verarbeiten (Speichern).
Das Formular auf Webserver Alpha kann per style='DISPLAY:none' auch komplett versteckt werden.
Auslöser für den Transfer ist eine Javascript-Funktion, die z.B. von einem Button aufgerufen wird.
Javascript im Header
function DoSend() {
var f = document.f_send;
f.action = "http://beta.com/receive.php"; f.submit();
}
Weiter unten, im BODY: das unsichtbare Formular
<form name='f_send' method='POST' style='DISPLAY:none'>
<input type='text' name='data' value='Bla bla bla'>
</form>
Der Absende-Button:
<button type='button' onClick='DoSend()'>Senden</button>
Das empfangende Skript receive.php auf Webserver Beta könnte so aussehen:
Php Einleitung
$data = $_POST['data'];
... hier: Daten speichern / in Datenbank schreiben ...
Weiter unten, im BODY:
Daten wurden empfangen.<br>
<a href='<?php echo $_SERVER["HTTP_REFERER"]; ?>'>Zurück</a>
In der Praxis würde man die Daten wahrscheinlich nicht sofort wegspeichern, sondern sie zunächst einmal anzeigen, damit der Benutzer eventuell noch eine Auswahl treffen und vielleicht auch entscheiden kann, was mit welchen Daten passieren soll.
Häufig weiss Webserver Beta nicht, ob (und wenn ja, welche) Daten auf Webserver Alpha bereitstehen. In solchen Fällen soll der Benutzer dann eine Auswahl treffen können. Dies erledigt am besten ein Skript der Quelle Alpha. Jeglicher Datentransfer wird mittels POST/GET-Parametern durchgeführt.
Hier ein denkbarer Ablauf:
- Webserver Beta (Anfrage starten):
- Aufruf eines Listing-Skripts auf Webserver Alpha.
- Webserver Alpha (Auswahl und Versand):
- Formular: In einer Liste werden die Titel der Datenpakete zur Auswahl (mittels Checkbox) angeboten.
Beim Submit ruft sich die Seite selbst auf.
- Nach Selbstaufruf: Checkboxen (POST-Parameter) auswerten.
Zur Kontrolle werden die ausgewählten Titel noch einmal gelistet.
In einem unsichtbaren Formular werden die eigentlichen Datenpakete hinterlegt.
Ein Bestätigen-Button schickt das unsichtbare Formular an ein Skript auf Webserver Beta.
- Webserver Beta (Empfang):
- POST-Daten lesen und verarbeiten (Speichern bzw. in Datenbank schreiben).
template |
|