php - serverübergreifend ?
Bernd Boruttau
- php
0 Fabian Transchel0 bb
0 Christoph Schnauß0 fastix®0 wahsaga
guten abend, gute nacht, und wenn wir uns nicht mehr seh'n, einen guten morgen ;-)
... mal im ernst. ich hab mal ne frage!
gibt es die möglichkeit aus einer php datei auf server A die abarbeitung einer 2. php datei auf server B anzustossen und die erste php datei mit einem rückgabewert über die beendigung der zweiten php datei über deren abschluss informieren?
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
viel spass beim grübeln
bernd
Hi
gibt es die möglichkeit aus einer php datei auf server A die abarbeitung einer 2. php datei auf server B anzustossen und die erste php datei mit einem rückgabewert über die beendigung der zweiten php datei über deren abschluss informieren?
Ja.
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
fsockopen()
Grüße aus Barsinghausen,
Fabian
fsockopen()
jo, danke vielmals ... werd mal sehen was damit zu machen ist!
mfg
bernd
guten Abend,
Also, du traust dir ja was:
gibt es die möglichkeit aus einer php datei auf server A die abarbeitung einer 2. php datei auf server B anzustossen und die erste php datei mit einem rückgabewert über die beendigung der zweiten php datei über deren abschluss informieren?
_eigentlich_ müßte man mit einem empörten NEIN reagieren und dich zart darauf hinweisen, daß PHP dafür zuständig ist, irgendetwas auf _dem_ Server anzustellen, auf dem es grade installiert ist.
Aber:
Prinzipiell ist sowas tatsächlich möglich, bloß fürchterlich umständlich. Dein Client muß von Server A über eine PHP-Abfrage was zugeschickt bekommen, das muß er dann als zweite Abfrage an Server B schicken, dort ein anderes PHP-Script abfragen, dessen Ergebnis wiederum als neue Abfrage an Server A zurücklaufen lassen und dann von dem das endgültige Ergebnis abfordern. Das geht tatsächlich, ist aber viel zu aufwendig und auch ziemlich unsinnig.
Welchem Zweck soll denn das Ganze dienen?
Ich hätte auch antworten können: so direkt, wie du es in der Frage formuliert hast, ist das nicht möglich, daß ein PHP-Script auf Server A gewissermaßen "aus eigener Kraft" auf Server B irgendwas anstellt. Allerdings kann ein Client von mehreren sehr unterschiedlichen Servern jeweils unterschiedliche PHP-Script-Ergebnisse anfordern.
Nur: wenn du in die Adreßzeile deines Browsers eine URL schreibst, fragt dein Browser natürlich bei dieser URL an (hinter der sich Server A verbirgt). Diese Anfrage geht nur in _eine_ Richtung. Das Ergebnis, das er zurückbekommt, kann allerdings die Abfrage einer (oder mehrerer) anderer URL's beinhalten.
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
Nein, hier wäre tatsächlich ein empörtes NEIN, und ein zarter Hinweis auf RTFM angebracht. Naja, Nachlesen schadet nicht, und RTFM hilft gelegentlich auch ...
Grüße aus Berlin
Christoph S.
und auch ziemlich unsinnig.
Welchem Zweck soll denn das Ganze dienen?
also ... jeder kennt doch bestimmt das kostenlose angebot von tripod?
zu jedem account gibts dort eine datenbank dazu. auf diese datenbank kann man jedoch nur aus dem dazugehörigen account zugreifen.
nun möchte ich aber von einem anderen server (ohne werbung)(account A) auf dem auch php läuft die datenbanken der kostenlosen accounts (account B)nutzen.
also suche ich eine möglichkeit mit der ich von account A eine datenbankabfrage an ein php script in account B sende. das script in account B bearbeitet die abfrage, sucht die einträge aus der datenbank und sendet diese als array oder sonstiges wieder an account A. dort sollen die ergebnisse dann weiterverarbeitet werden.
ich hoffe das war halbwegs verständlich
mfg
bernd
Hi!
zu jedem account gibts dort eine datenbank dazu. auf diese datenbank kann man jedoch nur aus dem dazugehörigen account zugreifen.
nun möchte ich aber von einem anderen server (ohne werbung)(account A) auf dem auch php läuft die datenbanken der kostenlosen accounts (account B)nutzen.also suche ich eine möglichkeit mit der ich von account A eine datenbankabfrage an ein php script in account B sende. das script in account B bearbeitet die abfrage, sucht die einträge aus der datenbank und sendet diese als array oder sonstiges wieder an account A. dort sollen die ergebnisse dann weiterverarbeitet werden.
Das Problem ist die Sicherheit. Ich würde das in etwa so machen:
Lege ein Script auf den Tripod-Server, welches einen SQL-Abfrage-String in einem bestimmten GET oder besser POST-Parameter erwartet. Dann führt das Script diese SQL-Abfrage in der lokalen DB aus, liest das Ergebnis entweder ein einen Array oder in ein CSV-Format, welches Du einfach mit echo ausgibst, wenn es ein Array ist musst Du den voher mit serialize in ein taugliches Format umwandeln.
Auf Deinem Server legst Du ein Script, welches eine Socket-Verbindung zu Deinem Tripod-Server herstellt(fsockopen), einen HTTP-Request mit der besagten SQL-Abfrage als Parameter, entsprechend per GET oder POST und ggfs. codiert, an das oben beschriebene Script sendet. Die Ausgabe kannst Du dann entsprechend weiterverarbeiten. Guck Dir dazu mal die Beispiele zu fsockopen im Manual an, auch die in den Kommentaren.
Und nun zur Sicherheit. Das absolute Minimum ist eine HTTP-Authentifizierung per .htaccess(hiermit das Script auf dem Tripod-Server schützen). Besser sowas wie GPG/PGP, mcrypt oder SSL. Das ist das allerwichtigste, da sonst jeder Zugriff auf Deine DB erhält und mal eben alle Tabellen löschen kann. Ist also eine riskante Geschichte. Man kann es aber vernünftig absichern, mit den oben beschriebenen Mitteln.
Viele Grüße
Andreas
Hi Christoph,
Also, du traust dir ja was:
gibt es die möglichkeit aus einer php datei auf server A die abarbeitung einer 2. php datei auf server B anzustossen und die erste php datei mit einem rückgabewert über die beendigung der zweiten php datei über deren abschluss informieren?
_eigentlich_ müßte man mit einem empörten NEIN reagieren und dich zart darauf hinweisen, daß PHP dafür zuständig ist, irgendetwas auf _dem_ Server anzustellen, auf dem es grade installiert ist.
Jain. Natürlich hat PHP auf dem Server zu laufen, auf dem auch der Webserver läuft. Aber was macht zum Beispiel ein mysql_connect? Richtig, es connected einen anderen (andersartigen) Server (der u.U. natürlich physisch auf derselben Maschine laufen kann, aber keinesfalls muss).
fsockopen() tut nichts anderes, als ein solches Socket zu einem beliebigen Server zu öffnen, wenn der es erlaubt. Damit kann man nun natürlich SMTP connecten, FTP, oder was immer man will. Und natürlich kann man damit auch einen HTTP-Verbindung aufbauen. Ich verstehe nicht, warum du dich über die Frage aufregst, ich halte diese Vorgehensweise in der Tat für sinnvoll (auch, wenn ich die Motive des Posters nicht billigen kann - ich bleibe einfach mal auf der technischen Schiene ;-)), wenn man über mehrere Server seine Daten "zusammensammeln" muss. Dass geht natürlich nicht nur mit PHP, genauso, wie man damit ein pseudo-CGI-Interface bauen kann, dass PHP mit Perl (oder wasimmer du möchtest) "sprechen" lässt.
Aber:
Prinzipiell ist sowas tatsächlich möglich, bloß fürchterlich umständlich. Dein Client muß von Server A über eine PHP-Abfrage was zugeschickt bekommen, das muß er dann als zweite Abfrage an Server B schicken, dort ein anderes PHP-Script abfragen, dessen Ergebnis wiederum als neue Abfrage an Server A zurücklaufen lassen und dann von dem das endgültige Ergebnis abfordern. Das geht tatsächlich, ist aber viel zu aufwendig und auch ziemlich unsinnig.
Finde ich nicht, man muss bloß HTTP-RFCs lesen und verstehen, alles andere kann das Script ziemlich effizient erledigen, so der zweite Server schnell genug ist.
Welchem Zweck soll denn das Ganze dienen?
Den hat er dir genannt, und *den* kann ich nicht billigen.
In Webseiten, die etwa erwünscht Daten eines (vom Netz aus absichtlich nicht direkt zugänglichen) Intranets bereitstellen sollen *können* so aufgebaut sein und sehr effizient dazu.
Ich hätte auch antworten können: so direkt, wie du es in der Frage formuliert hast, ist das nicht möglich, daß ein PHP-Script auf Server A gewissermaßen "aus eigener Kraft" auf Server B irgendwas anstellt.
Doch, nämlich dann, wenn er sich dort
a) Eine Art PHP-Socket bastelt oder
b) Über fsockopen() an eine Shell rankommt.
Allerdings kann ein Client von mehreren sehr unterschiedlichen Servern jeweils unterschiedliche PHP-Script-Ergebnisse anfordern.
Nur: wenn du in die Adreßzeile deines Browsers eine URL schreibst, fragt dein Browser natürlich bei dieser URL an (hinter der sich Server A verbirgt). Diese Anfrage geht nur in _eine_ Richtung. Das Ergebnis, das er zurückbekommt, kann allerdings die Abfrage einer (oder mehrerer) anderer URL's beinhalten.
Das ist irrelevant, da das angestoßene "primärlevel"-PHP-Script die Rolle eines sekundär-Clients übernimmt.
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
Nein, hier wäre tatsächlich ein empörtes NEIN, und ein zarter Hinweis auf RTFM angebracht. Naja, Nachlesen schadet nicht, und RTFM hilft gelegentlich auch ...
Wie gesagt, da er das nachschob, hielt ich ein RTFM nicht für angebracht, sondern habe eine konstruktive Antwort gegeben. Ich kann ehrlich gesagt nicht ganz nachvollziehen, warum du so empört reagierst.
Was hier gemacht werden soll ist nichts anders, als auch dein Kernel grob gesagt immer mal wieder macht, nämlich Anfragen (da dann eben Programmtechnischer Art) auf (Unix-)Sockets weiterleiten. Wo die (physikalisch oder netzwerktechnisch) liegen ist irrelevant, wenn die Route bekannt und nutzbar ist. Das ist auch der Grund, warum man bald im Internet Rechenkapazität "mieten" werden kann.
Grüße aus Barsinghausen,
Fabian
Moin!
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
Nö. Nicht unbedingt.
include("http://plapla/seite.php?variable=wert") führt zur Abarbeitung auf dem Server.
Wenn die jetzt:
<?php $Abgearbeitet=1; ?> oder <?php $Abgearbeitet=0; ?>
zurückgiebt, dann hast Du genau erreicht, was Du wolltest.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
hi,
damit ist nicht include oder require gemeint, die ja die dateien direkt einbinden.
Nö. Nicht unbedingt.
include("http://plapla/seite.php?variable=wert") führt zur Abarbeitung auf dem Server.
Wenn die jetzt:
<?php $Abgearbeitet=1; ?> oder <?php $Abgearbeitet=0; ?>
zurückgiebt, dann hast Du genau erreicht, was Du wolltest.
das glaube ich nicht.
wenn du in einem script auf server A eine ressource von server B per include über das htt-protkoll einbindest, bekommt server A lediglich die vom script auf B erzeugte _ausgabe_ zu sehen (andernfalls wäre server B extremst fehlkonfiguriert!), idR html-code.
wenn im script auf server B jetzt, wie du sagtest,
<?php $Abgearbeitet=1; ?>
drin steht, wird damit lediglich eine variable im arbeitsspeicher von server B abgelegt - wie bitte soll server A darauf zugreifen können?
gruss,
wahsaga
Hi!
wenn im script auf server B jetzt, wie du sagtest,
<?php $Abgearbeitet=1; ?>
drin steht,
Wo hat er das gesagt? Er sagte "zurückgeben"! Wäre sogar eine nicht uninteressante Variante, man könnte mit var_export direkt den fertigen Array ausgeben, nur ein <?php vorher und ?> nachher, und schon hat man die Daten fertig in einem Array stehen. Der Grund warum ich das trotzdem eher nicht machen würde, ist die Sicherheit, wie willst Du Dich so noch authentifizieren? HTTP-Auth scheidet hier aus und ob der Rest mit einem Kostenlos-Server möglich ist wage ich doch zu bezweifeln.
Grüße
Andreas
Moin!
wenn im script auf server B jetzt, wie du sagtest,
<?php $Abgearbeitet=1; ?>
drin steht,
Wo hat er das gesagt? Er sagte "zurückgeben"! Wäre sogar eine nicht uninteressante Variante, man könnte mit var_export direkt den fertigen Array ausgeben, nur ein <?php vorher und ?> nachher, und schon hat man die Daten fertig in einem Array stehen. Der Grund warum ich das trotzdem eher nicht machen würde, ist die Sicherheit, wie willst Du Dich so noch authentifizieren? HTTP-Auth scheidet hier aus und ob der Rest mit einem Kostenlos-Server möglich ist wage ich doch zu bezweifeln.
Genau so ist es. PHP auf dem Server macht ganz einfach folgendes:
echo '<?php $Abgearbeitet='.$x.'; ?>';
um den Status zurückzugeben.
Das geht natürlich auch mit Arrays..., ist im Prinzip das gleiche "Problemileinchen", wie das dynamische Erzeugen von Javascript.
Von der Notwendigkeit einer Möglichkeit der Authentifizierung im Kontext der Fragestellung habe ich nichts gewusst. Er wollte die Datenbank abfragen... Ich bin einfach davon ausgegangen, dass er ja nicht irgendwo eine Seite erstellt und bei Google anmeldet, wo drinsteht, was man welchem Skript per URI übergeben muss, damit die Datenbank dedropt wird :)
Aber er kann ja noch ein Passwort einbauen, da normale Benutzer die Quelltexte beider Skripte normalerweise nie zu sehen bekommen:
<?php include("http://server/skript?var1=wert1&var2=wert2&passwort=langgenug")
?>
sollte es tun... Muss das Skript auf dem entfernten Server eben immer das Passwort prüfen. Natürlich kann man sich auch kompliziertere Dinge vorstellen, aber letztendlich bringen die nichts...
Immerhin muß man sich auch die Frage stellen, wie umfangreich oder wertvoll können denn Daten sein, die bei einem freehoster gelagert werden...
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®