[PHP] Daten von server zu server übermitteln

zuendkerzn

mir is langweilig
24 August 2006
50
1
also ich hab folgendes problem bzw. suche folgende funktion:

ich hab auf server1 eine datei die daten ausgewertet hat und an server2 senden will

problem: wie ruf ich die datei aufm server2 auf?


so für alle dies ned gecheckt haben
ich brauch ne funktion die funktioniert und vom sinn her das macht:

PHP:
include("datei.php?daten=asdf");
(da kommt nur das er die datei nicht findet)


so danke schonmal fürs lesen

mfg
 
Du kannst keine Datei auf einem anderen Server inlcuden, weil das include direkt aufs Dateisystem zugreift. Das geht also nicht.

Aber du kannst die Datei ganz normal über HTML aufrufen (z.B. als Link oder als Ziel eines Formulars) und so natürlich auch die Daten übermitteln.
 
Aber du kannst die Datei ganz normal über HTML aufrufen (z.B. als Link oder als Ziel eines Formulars) und so natürlich auch die Daten übermitteln.
Was willst du mit HTML ? :think:
Wenn Daten von Maschine zu Maschine übermittelt werden, brauchen sie keine für Menschen schöne Form. Wenn, dann mit XML strukturiert, aber das ist Sache, was es für Daten sind.

Zum Problem:
Am einfachsten ist es, wenn Server 1 die Daten bei sich abspeichert. Zu empfehlen ist ein geschütztes Verzeichnis, sonst kann ja jeder drauf zugreifen.
Server 2 kann die Datei dann über HTTP (wenn File-wrapper und allow_url_fopen gesetzt sind) einfach mit fopen() öffnen.

Wenn die Sicherheitseinstellungen das verbieten, kann man mit Sockets vorgehen, oder wie ich besser empfehlen würde, FTP benutzen:
Server 2 verbindet dann über FTP (so Server 1 FTP-Server ist) zu Server 1 und holt sich die Daten so ab.
 
Also wenn es nur um ganz wenige Daten geht, dann ist XML etwas zu aufwendig. Dafür brauch man keine Datei erstellen, die dann irgendwie auf den anderen Server zu transportieren ist, sondern man kann die Daten einfach an einen Aufruf einer Datei auf dem anderen Server ranhängen (als Parameter).
datei.php?daten=asdf
So, wie er es ja auch machen will. Nur geht halt das Include nicht, sondern es muss entweder ein Link <a href="datei.php?daten=asdf"> oder ein Formular sein. Möglich wäre auch noch das öffnen in einem Frame. Und für diese 3 Möglichkeiten nutzt man HTML. :biggrin:

Wenn man natürlich große Mengen an Daten hat, die sowieso in einer Datei stehen, dann sollte man eher zu den von dir beschriebenen Möglichkeiten greifen. (und FTP zwischen 2 Servern im Netz ist geil, weil es extrem schnell geht) Allerdings hatte ich die Aufgabe ein bißchen anders verstanden.
 
Du hast einen kleinen, aber feinen Denkfehler drinnen:
[...] sondern es muss entweder ein Link <a href="datei.php?daten=asdf"> [...]
Einen Link muss ein Mensch klicken. Wir sprechen hier von Kommunikation zwischen 2 Maschinen.
[...] oder ein Formular [...]
Ein Formular muss ein Mensch abschicken. Wir sprechen hier aber von 2 Maschinen.
[...] Möglich wäre auch noch das öffnen in einem Frame.
Ein Frame wird in einem Browser geöffnet. Der Browser benötigt einen Menschen, der ihn startet und die URL eingibt. Wir haben aber keinen Menschen, sondern nur 2 Computer.
Und für diese 3 Möglichkeiten nutzt man HTML. :biggrin:
Ergo bist du mit HTML auf dem Holzweg :p ;)

Wenn die Daten wirklich so klein sind, dass man sie über die URL rausschickt, dann kannst du einfach
PHP:
readfile("https://www.server2.example.com/empfange.php?data=xyz");
machen.
 
rofl
sry wenn ichs so sagen muss aber alles
ausser the_hacker sind hier alle bissl aufm holzweg
der andere mit nem link-.- sehr intelligent XD

ne nommal zum problem
so wie the hacker schon gesagt an das holen hab ich auch schon gedacht nur leider weis server2 nicht wann er sie holen muss

mir fällt da nur eine methode ein und zwar:
server1 include/readfiled/öffnet ne php datei aufm server2
diese datei includet dann ne datei von server1 und ließt dessen quellcode ein und nimmt diesen als daten aus

mir gefallen nur 3 sachen da dran ned:
1. es dauert zu lange
2. es ist sehr umständlich
3. ich muss die daten "öffentlich" bekannt geben (so das es die datei vom server2 holen kann)

noch als denk anreiz kann man evtl. per php die daten auch per method post senden? also ned per get in die url schreiben sondern per post senden?

mfg und danke an alle schonmal (auch wenns bisschen missverstanden worden is)
 
... und ließt dessen quellcode ein und nimmt diesen als daten aus

Jetzt bin ich verwirrt. Deine Daten sind gar keine Daten sondern Quelllcode???

Bitte hilf uns doch mal, vom Holzweg weg zu kommen. Hab dazu 2 Fragen:

1. Server 1 wertet irgendwelche Daten in einer Datei aus. Dabei gibt es Ergebnisdaten, die an Server 2 geschickt werden sollen. Beschreib mal grob, wie die Ergebnisdaten aussehen und wie viele es sind. (Nach deinem ersten Post zu urteilen würde ich sagen es ist nur ein einziges Ergebnis. Bin mir da momentan aber garnicht mehr sicher.)

2. Wie wird die Bearbeitung der Daten angestoßen? Wird dazu im Browser eine Datei aufgerufen, oder ein Cronjob gestartet, oder noch was anderes?
 
mir fällt da nur eine methode ein und zwar:
server1 include/readfiled/öffnet ne php datei aufm server2
diese datei includet dann ne datei von server1 und ließt dessen quellcode ein und nimmt diesen als daten aus

mir gefallen nur 3 sachen da dran ned:
1. es dauert zu lange
2. es ist sehr umständlich
3. ich muss die daten "öffentlich" bekannt geben (so das es die datei vom server2 holen kann)

Wieso musst du da die Daten öffentlich bekannt geben?
Server1 baut eine Socket Verbindung zu Server2 auf, sendet einen GET/POST Request an xyz.php.
Diese weis dann, dasss daten vorhanden sind und ruft die hole.php auf Server2 auf.

Wo sind dann die Daten öffentlich?

Und "öffentlich" sind sie sowieso wenn du sie durchs Inet schickst.

Und wieso willst du dann den Quellcode einlesen?
Ich hätte gedacht, Daten die ausgewertet worden sind willst du haben?

noch als denk anreiz kann man evtl. per php die daten auch per method post senden? also ned per get in die url schreiben sondern per post senden?

Ja geht.
Musst du halt mit den Socket Funktionen eine Verbindung aufbauen.
 
-.-
was wollt ihr jetzt mitm quellcode ;/

das mitm quellcode war bei mir so gemeint: die datei aufm server1 gibt die zu übermittelten daten aus und somit stehen sie im quellcode von dieser datei wenn man sie dann aufruft

welche daten?
n base64 code

wie sie gestartet werden?
dann hald nommal: ich/der user/dessen browser öffnet nur die datei auf server1

@biehler danke schonmal das mit den sockets muss ich mir mal genauer anschauen ;)

mfg
 
Hallo zuendkerzn

Bitte achte doch etwas auf deine Rechtschreibung. Was soll denn
sein? Vielleicht: Dann halt nochmal? Aber das hattest du noch gar nicht geschrieben. :-?

Stehen die Daten direkt in der Datei (im Quellcode oder wo auch sonst) oder sind da Variablen drin, die zur Laufzeit die Daten enthalten?

Wieviele Daten es sind, weiß ich immer noch nicht...

Wenn du die php-Datei 1 mit dem Browser öffnest, dann könntest du einen Link machen, bei dem die Daten angehängt werden. Besonders unsicher ist das nur, wenn du den Link irgendwo speicherst. Ansonsten ist (wie schon irgendwo hier geschrieben) alles was unverschlüsselt über Netz geht unsicher. (Diese Variante eignet sich aber nur, wenn es wenige Daten sind.) Das ganze wäre evtl. auch über ein Formular machbar (die Daten dann in <input type="hidden" ...> stecken). Wobei ich mir grad nicht sicher bin, ob POST auch bei verschiedenen Domains funktioniert (aber müßte eigentlich).

Wenn du viele Daten hast, dann wurden hier ja schon einige Lösungen beschrieben.
 
Bitte achte doch etwas auf deine Rechtschreibung.

sry aber ich bin bayer und des bleibt a so

warum nochmal:

ich hab auf server1 eine datei die daten ausgewertet hat und an server2 senden will
(stand im ersten post)

da steht doch klar und deutlich das eine DATEI einer anderen daten senden will kein browser kein user kein nix nur ne datei

die daten hab ich in der datei auf server1 als variablen als was hat man denn sonst daten? (und wenn ich die ausgeb dann stenna de im quellcode(=sicht des browser auf ne datei [also im html format]) der datei)


Wieviele Daten es sind, weiß ich immer noch nicht...
zitat dazu:
was musste da noch mehr wissen? ich nehm alle meine variablen (ja genau die enthalten daten) werf diese zusammen und lass die per base64(klick) encoden
und diesen code will ich übermitteln

und ja einige lösungen wurden hier schon geschrieben die probiere wie ich ja auch geschrieben hab noch aus (z.b. die mit den sockets)

und per link klicken gehts ned weil es dei datei alleine machen muss ohne das n mensch was anklickt

mfg
 
sry wenn ichs so sagen muss aber alles
ausser the_hacker sind hier alle bissl aufm holzweg
Trotzdem: theHacker ;)
noch als denk anreiz kann man evtl. per php die daten auch per method post senden? also ned per get in die url schreiben sondern per post senden?
Wurde zwar schon gesagt, aber ich bestätige das nochmal:
Du kannst ganz normal einen HTTP POST-Request an Server 2 schicken.

Benötigen tust du hierzu nur Socket-Funktionen (ganz einfach, fsockopen() und sonst mit den f....()-Funktionen wie auf einer Datei drauf arbeiten - alles ist eine Datei) und Kenntnisse über das HTTP-Protokoll, die du in der entsprechenden RFC 2616 nachlesen kannst.
die daten hab ich in der datei auf server1 als variablen als was hat man denn sonst daten?
Daten müssen doch nicht unbedingt Variablen sein. Die wenigsten Daten sind Variablen. Die Daten werden nur Variablen zugewiesen, um damit arbeiten zu können.
Was ich nicht verstehe: Wenn du die Daten in der Datei hast, warum schickst du nicht einfach die Datei als ganzes rüber ?
ich nehm alle meine variablen (ja genau die enthalten daten) werf diese zusammen und lass die per base64(klick) encoden
Ich muss nochmal nachfragen: Wie sieht denn z.B. so ein Datum aus, was du übermitteln willst ? Mit Base64 erhöhst du nur die Datenmenge. Wenn es nicht grade binäre Daten sind, kannst du diese doch ganz normal senden.
 
hmmm wie meinst das mit datei rübersenden?

und
base64 erhöht die Datenmenge?
hab ich ned gewusst ich hätt etz schonmal angenommen das diese n bisschen kleiner macht naja gut danke für den tipp
 
und
base64 erhöht die Datenmenge?
hab ich ned gewusst ich hätt etz schonmal angenommen das diese n bisschen kleiner macht naja gut danke für den tipp

Ich denke mal, die Menge wird erhöht, da aus 3 Byte 4 zeichen gemacht werden.
D.h. pro 3-Byte-Block wächst die Datenmenge um 1 Byte an.
Dazu kommen dann Füllbytes und gegebenfalls Zeilenumbrüche und die Kennzeichnung, wieviel Füllbytes vorhandne sind (OK, das und der Zeilenumbruch dürften relativ wenig an der Größe machen :mrgreen: )
 
Selten wirre Problemstellung, meine Fresse. Lernt man in Bayern nicht, sich zu artikulieren? :evil: Wenns um die Kommunikation zwischen Maschinen geht, fallen mir auch als erstes die Socketfunktionen ein. Für reine Dateiübertragung ftp. Solls zeitlich gesteuert sein, dann nen Cronjob verwenden. Die genaue Problemstellung ist mir allerdings trotzdem nicht klar.
 
so, die idee mit dem formula ist doch nicht dumm, einziger fehler ist der mensch dahinter...

aber wozu haben wir php und post_request...
was ich damit sagen möchte..., du kannst ein post request schicken an eine beliebige datei (auf einem beliebigen server) und zwar nur mit php (ohne mensch)..., aber wie es genau funktioniert hab ich bis heute nicht verstanden...
mal ein link dazu
https://www.php-faq.de/q/q-code-post.html

auf alle fälle, wenn du es dann fertig hast, bekommt die beliebige datei die das post request bekommt, die daten in dem array $_POST zugesandt und kann diese dann verarbeiten...

sollte funktionieren, hatte ich auch schon mal am laufen und ich weiß das hacker sich dies bei meinem BrowserGame zunutze gemacht haben^^

mfg
topo
 
[..]mir gefallen nur 3 sachen da dran ned:
1. es dauert zu lange
2. es ist sehr umständlich
3. ich muss die daten "öffentlich" bekannt geben (so das es die datei vom server2 holen kann)[..]

1. Warum dauert das zu lange? Ist ja einfach nur reines Datei auslesen.
2. Eigentlich ist es gar nicht mal umständlich ;) Datei auslesen, Base64 encoden, mit eval() (Aber eval = evil :p) ausführen wenn es PHP Code ist
3. Die Datei ist schon öffentlich. Aber gegen das auslesen gibt es doch einen sehr leichten Schutz:
PHP:
if($_GET['pw'] != "DeinPasswort") die("Unberechtigter Zugriff!");
Voraussetzung dafür ist halt, dass es eine PHP Datei ist ;)

Gruß,
chrissel