Seite 1 von 2

Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 14:36
von Sanchez17
Hey an alle :-)

ich bin ein wenig am experimentieren und hab da ein paar Fragen bzw. suche Lösungsansätze - 2 Lösungen habe ich auch. Vielleicht kann man mir ja helfen.

Ausgangsituation:


Gehen wir mal davon aus wie haben 2 Webseiten, einmal
>>>>>> www.nutzer.de
>>>>>> www.nutzer-2.de

>>>>>> www.leister.de

www.leister.de bietet eine Dienstleistung an Webseiten an. Beispielsweise ein Lexikon, welches auf Webseiten eingebunden werden kann.
www.leister.de stellt dabei aber nur die Datenbank zur verfügung - besitzt also keine eigene Homepage.

Nun kann www.nutzer.de sowie www.nutzer-2.de das Lexikon bei sich einbinden. Die Daten sollen von www.leister.de entnommen werden - sprich die Datenbank Einträge im Lexikon.
Zusätzlich soll man von www.nutzer.de sowie www.nutzer-2.de Daten in die Datenbank von www.leister.de einfügen können.

Was wäre der beste Ansatz um die Kommunikation der Server herzustellen?

also quasi

Code: Alles auswählen


www.nutzer.de < Daten > ## www.leister.de ## < Daten > www.nutzer-2.de
Hab schon viel gegoogelt aber nichts brauchbares gefunden.

Meine 2 Ansätze:

I. Eine file() Verbindung
Damit www.nutzer.de Daten bekommt, werden die Daten per file aufgerufen:
Also ein Script ruft folgendes auf: file("www.leister.de/daten_holen.php");
daten_holen.php lädt die Daten aus der Datenbank und gibt diese im CSV Format (also: Text1|Text2| usw) aus..dies kann www.nutzer.de einesen und formatieren bzw damit arbeiten.
Sollen Daten von www.nutzer.de nach www.leister.de übergeben werden, wird die dies wie folgt erledigt:
file("www.leister.de/daten_update.php?text1=bla&text2=bla");

Wie wäre diese Lösung? Wie Trafficlastig würde diese sein? Und gebe es dabei große risiken (man kann ja auch Passwörter beim Aufruf versehen, die nur die beiden Websieten wüssten, ala file("www.leister.de/daten_holen.php?key=passwort");


II. Mit mail()
Quasi das Daten gesammelt werden und dann zum Beispiel einmal pro Tag diese mit mail() an ein Posteingang gemailt wird. Ein PHP Script kontrolliert den POP3 Eingang und verarbeitet die Daten in der Mail.
Das wäre sicherlich einfacher, aber so müsste www.nutzer.de Tabellen in deren Datenbank für das "zwischenspeichern" besitzen. Eine Lösung ohne zwischenspeichern bei www.nutzer.de würde ich - sofern möglich - bevorzugen,.

Wie effizient wäre diese Methode?


Über Kritik, Verbesserungsvorschläge oder ganz neue Ideen würde ich mich freuen :-)
Bitte bedenkt, das nur PHP genutzt werden kann.

lg miguel

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 15:17
von gn#36
Was ist denn mit XML Datenaustausch? Das wäre ja auch ein recht flexibles Format, das habe ich testweise auch für Client/Serveranwendungen verwendet. Alternativ richtest du dir die SQL Datenbank so ein, dass man von extern darauf zugreifen kann, dann brauchst du auf der Serverseite gar nichts programmieren und die Clientseite greift eben auf die externe DB zu statt auf eine interne. Je nach dem wie viel Aufwand du da reinstecken willst gibt es da sicher auch Lösungen, die so eine Datenbank auf mehrere Server spiegeln. Oder du setzt direkt auf ein verteiltes Datenbanksystem (Stichwort NoSQL).

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 16:38
von Sanchez17
Erstmal danke für die Antwort :-)

Zu XML:
Das wäre ja ein ähnliches Prinzip wie meine file() Idee. Daten formatiert Ausgeben bzw einlesen.
Gibt es den wenn ich beispielsweise SimpleXML verwende Vorteile gegenüber meine file() Version?

Weil vom Prinzip her sehe ich kein Unterschied - außer das ein XML viel mehr Zeichen enthält (die ganzen Tags) als ein CSV mit Pipes als Trenner und somit größer (mehr Traffic) wäre.
Hab mich zugegeben auch noch kaum mit PHP - XML beschäftigt. Fand aber jetzt so keine großen Vorteile.

Bezüglich externe Datenbank:
Darüber habe ich auch schon überlegt - allerdings hätte so ein http://www.nutzer.de nicht nur Zugang zu den Daten sondern auch volle Kontrolle.
Wenn http://www.nutzer.de beispielsweise mal gehackt wird und die sich die Zugangsdaten nehmen könnte das auch folgen auf http://www.leister.de haben bzw die Datenbank.

Mit dem file() bzw mail() Prinzip werden keine direkte Zugangsdaten zur Datenbank abgegeben. Das wäre mir schon lieber.


Sollte ich mla unsinn erzählen => direkt meckern :D
Steig jetzt erst wieder nach nem Jahr ins Thema PHP/ MySQL und eben ganz neu mit der Kommunikations von Server ein :-)

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 17:05
von P7BB
Sanchez17 hat geschrieben:Wenn http://www.nutzer.de beispielsweise mal gehackt wird und die sich die Zugangsdaten nehmen könnte das auch folgen auf http://www.leister.de haben bzw die Datenbank.
Oder wenn nutzer.de sofort "böse" ist und deine datenbank löscht, verändert,... ;)

Also du benötigst auf jeden Fall eine Api, die es anderen Homepages ermöglicht, Daten auszutauschen. Dafür eignet sich, wie gn#36 sagte, XML recht gut. Du könntest aber genausogut auch ein Format á la
result:1
eintrag1:bla
eintrag2:blabla
benutzen, aber du musst in beiden Fällen auf jeden Fall sicherstellen, dass Nutzereingaben das Ergebnis nicht verfälschen, also wenn in der Datenbank für "result" das hier steht:
0
eintrag1:verfälscht
eintrag2:verfälscht
result:1
dann würde dort stehen:
result:0
eintrag1:verfälscht
eintrag2:verfälscht
result:1
eintrag1:bla
eintrag2:blabla
Somit hätte man einen neuen Eintrag hinzugefügt, der da nicht reinkommt. Ich persönlich habe sowas schonmal nach dem Schema gemacht und zwar so, dass ich alle "Ergebnisse" in Hexadezimal schreibe, also sowas wie
bla:0F15ACD
Gleichzeitig habe ich bei meiner Api auch direkt noch die Möglichkeit eingebaut, dass ich mehrere Daten über ein "bla:" übergebe, indem ich es einfach mit einem trennzeichen abgetrennt habe... Etwa so:
bla:0F15ACD/2F3C4E/FFBB11AC3E
Ob das ganze jetzt unbedingt so vorteilhaft für eine Schnittstelle zwischen 2 Homepages ist, weiß ich nicht, aber zumindest dürfte man damit weniger Traffic verursachen, als bei einer XML-Datei ;)

Aso, als Möglichkeit zur Übertragung würde ich weder file() noch irgendwelche Methoden mit mail() nehmen, sondern ganz einfach einen HTTP-Request schicken, der an die Diestleistungsseite nebenbei auch das Suchwort oder sowas mitsendet und dann das entsprechende Ergebnis weiterverarbeitet.
Siehe auch: fsockopen(), fputs(), fgets(), fclose()
Dafür solltest du am besten aber auch eine fertige Client-Klasse zum Download anbieten, denn sowas sollte direkt mit der Host-Klasse abgestimmt sein ;)

MfG

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 17:55
von Sanchez17
Hey

danke für deine Antwort.

Soweit alles verstanden. Doch eine Frage noch dazu: Worin besteht der Vorteil wenn ich mit fputs eine HTTP-Request Sende anstatt file() zu benutzen?
Habe mich so mit fputs etc. nicht beschäftigt und kenn mich damit nicht so aus - bin aber gerade dabei fleißig das zu testen :D

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 18:13
von P7BB
Naja, ich vermute, dass fputs() und so auf dasselbe hinauslaufen, wie file(), aber du hast beispielsweise schonmal den Vorteil, dass du ohne großen Aufwand zeilenweise das Ergebnis einlesen kannst ;) So kannst du das ggf. besser verarbeiten...
Und du kannst noch einen Referrer einstellen,... ;) Zudem schickst du die Daten dann per POST, statt per GET. Ob dir das jetzt so großartige Vorteile bietet, weiß ich nicht, aber damit hab ich es jedenfalls gemacht :)

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 09.07.2010 18:40
von Sanchez17
ok danke :-)

werde mich dann mal mit allen beschäftigen und eine wahl treffen :-)

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 10.07.2010 00:22
von gn#36
fgets etc haben gegenüber file überhaupt keinen Vorteil. wenn du eh alle daten brauchst solltest du sie lieber per file komplett mit der C Funktion holen als langsam zeilenweise per PHP. Das würde ich nur machen wenn du probleme mit dem Speicherbedarf des skriptes hast.

Was die sicherheit des Sql Servers angeht muss ich auch wiedersprechen: Du kannst auch user einrichten, die nur lesezugriff erhalten und das sogar auf bestimmte Tabellen, sogar auf einzelne Spalten beschränkt. Du könntest so z.b. den Zugriff auf "öffentliche" Daten beschränken und sensible Daten und Änderungen auf anderem weg machen. das könnte sich bei hauptsächlich lesenden verbindungen auszahlen.

Was die Transporte der Daten angeht hat xml natürlich erst mal keine Vorteile gegenüber csv, allerdings lässt sich XML strukturiert einlesen, du kannst also z.B. objektzugehörigkeiten in der Struktur darstellen und musst nicht mühsam die Tabelle filtern. Kommt natürlich auf deine Daten an, ob das ein Vorteil ist oder nicht. Wenn du eh nur Tabellendaten einzeln überträgst kannst du natürlich auch einfach bei csv bleiben. Mail würde ich nicht machen Das fügt letztlich nur einen weiteren Server in die Kette, das geht auch direkt.

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 10.07.2010 21:22
von djchrisnet
ich kann das json format sehr empfehlen. siehe dazu json_encode & json_decode
ausserdem ziehe ich file_get_contents vor, da sie eine datei als string zurückgibt und damit sehr viel einfacher zu händeln ist.

wieso xml hier immer favorisiert wird, kann ich nicht nachvollziehen...

Falls Interresse besteht, gebe ich gerne einblick in einen teil meiner api´s.

Re: Kommunikation zwischen 2 (oder mehr) Server/ Webseiten

Verfasst: 11.07.2010 13:06
von Sanchez17
Danke für die Infos :-)

Jetzt sind wieder ein paar neue Begriffe gefallen...ich werde mich mal die Tage in ruhe alles nachlesen und ausprobieren :-)

Ein dirketer Zugang zu Datenbank hört sich mit Lesezugriff auch recht interessant an - aber dafür wird man denke ich, root berechtigungen benötigen, oder?
Google spuckt jetzt auf die schnelle nichts brauchbars auch - aber werde mich, wie gesagt, mal alles die Tage recherchieren :-)