Antworten auf deine Fragen:
Neues Thema erstellen

Datenaustausch mit PHP über 2 Server

womic2000

Nice Guy

Hallo,

ich habe ein Problem mit der Umsetzung:

Auf ServerA läuft eine Datenbank. Die Datenbank kann nicht von einem anderen Server erreicht werden.

ServerB soll aber eine Info auf der Datenbank erhalten können.

Meine Idee:
Auf ServerA könnte ich per Include ein PHP-Skript einbinden, welches in einer Funktion das Ergebnis zurückliefert. - Geht aber net. Fehlermeldung: Fatal error: Call to undefined function: check()

Was könnte ich noch machen ?
 

PapaTrust

Noch nicht viel geschrieben

AW: Datenaustausch mit PHP über 2 Server

wenn es wiklich zwei verschiedene Server sind und der eine auf Realtime läuft und der andere nicht dann kann es schon ein Problem sein.

DNS berücksichtigt?
PHP bezug auf?

poste doch mal nen Frame um Deteils zu sehen.
 

womic2000

Nice Guy

AW: Datenaustausch mit PHP über 2 Server

Auf ServerA mit Datenbank:
Code:
<?php

function check($name) {
   return $name;
}

?>

Auf ServerB:
Code:
<?php
include'http://www.ServerA.de/check.php';
print check("TEST")."<br>";
?>

Ich möchte im Endeffekt auf dem ServerB die Ausgabe TEST haben.
 

r3nt5ch3r

~ Allround pG ~

AW: Datenaustausch mit PHP über 2 Server

Auf ServerA mit Datenbank:
Code:
<?php

function check($name) {
   return $name;
}

?>
Auf ServerB:
Code:
<?php
include'http://www.ServerA.de/check.php';
print check("TEST")."<br>";
?>
Ich möchte im Endeffekt auf dem ServerB die Ausgabe TEST haben.

Also, so wie du es jetzt hast wird auf ServerA die Seite geparst -> weiße Seite ohne Inhalt. ServerB includet diese -> er includet nichts^^

Entweder gibt ServerA den php Code aus -> B bindet ihn ein und hat neue Funktionen, jedoch kannst du so nur statischen Code verteilen. Ich würde das ganze über eine Schnittstelle lösen. Bspw: ServerA gibt Datenbank-Tabelle als XML aus die ServerB dann wieder einlesen kann.

€dit:
Korrektur:
If "" are enabled in PHP (which they are in the default configuration), you can specify the file to be included using a URL (via HTTP or other supported wrapper - see for a list of protocols) instead of a local pathname. If the target server interprets the target file as PHP code, variables may be passed to the included file using a URL request string as used with HTTP GET. This is not strictly speaking the same thing as including the file and having it inherit the parent file's variable scope; the script is actually being run on the remote server and the result is then being included into the local script.
Ok neue Idee: Du kannst über $_GET einen String übergeben, der deinem SQL-Query entspricht. Dieser wird dann auf ServerA ausgeführt und bspw als XML ausgegeben oder auch als ser-ialsiertes Array (!!). Diese Ausgabe bekommt dann ServerB und kann damit weiterarbeiten. (Sollte dementsprechend gut gesichert sein^^)
 
Zuletzt bearbeitet:

womic2000

Nice Guy

AW: Datenaustausch mit PHP über 2 Server

Also, so wie du es jetzt hast wird auf ServerA die Seite geparst -> weiße Seite ohne Inhalt. ServerB includet diese -> er includet nichts^^

Entweder gibt ServerA den php Code aus -> B bindet ihn ein und hat neue Funktionen, jedoch kannst du so nur statischen Code verteilen. Ich würde das ganze über eine Schnittstelle lösen. Bspw: ServerA gibt Datenbank-Tabelle als XML aus die ServerB dann wieder einlesen kann.

Meinst du dann, dass ServerA das XML rausschreibt, und ServerB liest und parst dann das XML-File ?

Es gibt aber auch noch ServerC, ServerD .... die auch bei ServerA anfragen können.

ServerA macht eine SQL-Abfrage und gibt anschließend einen String zurück, z.B. "OK" oder "NOK".
 

r3nt5ch3r

~ Allround pG ~

AW: Datenaustausch mit PHP über 2 Server

Beispiel:
ServerA (einfache Ausgabe von einem seria-lisierten Array -> dein Ergebnis der Datenbankabfrage):

PHP:
<?
echo ******ize(array('test1', 'test2'));
?>

ServerB (nimmt diese Ausgabe und wandelt sie wieder in ein Array um -> Datensätze von ServerA zu B übergeben):

PHP:
<?
print_r(un******ize(file_get_contents('http://localhost/bla/2.php')));
?>
***** = seral
 
Zuletzt bearbeitet:

CIX88

Aktives Mitglied

AW: Datenaustausch mit PHP über 2 Server

Schneller wäre die Lösung beim ServerA die Datenbank für ServerB-Zugriff freizugeben. Das Einbinden mit include() oder änlichen erzeugt zusätzlichen Traffic ist ist langsamer weil es letztlich ein ganz normaler HTTP-Zugriff ist. Der Austausch innerhalb von Servern geht 10mal schneller als nornmale DSL-Verbindungen zum Client.

Nur eine Idee ...
 

r3nt5ch3r

~ Allround pG ~

AW: Datenaustausch mit PHP über 2 Server

Der Austausch innerhalb von Servern geht 10mal schneller als nornmale DSL-Verbindungen zum Client.
Wie hab ich das zu verstehen? Das ganze passiert doch Serverseitig?!
 
Zuletzt bearbeitet:

stroyer

Aktives Mitglied

AW: Datenaustausch mit PHP über 2 Server

Die Sicherheit ist zur Zeit noch etwas problematisch. So könnte jeder, der das System kennt deine Daten auslesen bzw. auch löschen.
Ich würde zusätzlich zur Query auch noch einen Hash oder so übertragen. Alternativ könntest du die Query per RC verschlüsseln und einen MD5-Hash mitliefern.

Hier noch ein Source für eine RC-Verschlüsselung:
PHP:
<?php
  function Byte($x)
    {
      if($x>255)
        {
          return $x % 256;
        }
      else
        {
          if($x<0)
            {
              return 256 + ($x % 256);
            }
          else
            {
              return $x;
            }
        }
    }
  function RoundD($int)
    {
      return Round($int-0.5);
    }
  function shr($x, $y)
    {
      for($i=0;$i<$y;$i++)
        {
          $x=RoundD($x/2);
        }
      return $x;
    }
  function RCxInitRaw($Key, $KeySize)
    {
      $L=0;
      for($S=0;$S<256;$S++)
        {
          $RCx[0][$S] = $S;
          $M[$S] = Byte($Key[$S % $KeySize] ^ $L);
          $L = ($L + $M[$S]*257) % 2147483647 + 1;
        }
      $RCx[1] = 0;
      $RCx[2] = 0;
      $R = Byte($L);
      $RCx[3] = Byte(shr($L, 8));
      for($S=0;$S<256;$S++)
        {
          $R = Byte($R + $RCx[0][$S] + $M[$S]);
          $T = $RCx[0][$S];
          $RCx[0][$S] = $RCx[0][$R];
          $RCx[0][$R] = $T;
        }
      return $RCx;
    }
  function RCxInit($Key)
    {
      for($i=0;$i<strlen($Key);$i++)
        {
          $ar[$i] = ord(substr($Key,$i,1));
        }
      return RCxInitRaw($ar,$i);
    }
  function RCxEncodeRawRaw($RCx, $S, $count)
    {
      for($C=0;$C<$count;$C++)
        {
          $RCx[1] = Byte($RCx[1] + 1);
          $T = $RCx[0][$RCx[1]];
          $RCx[2] = Byte($RCx[2] + $T);
          $RCx[0][$RCx[1]] = $RCx[0][$RCx[2]] ^ $RCx[3];
          $RCx[0][$RCx[2]] = Byte($T - $RCx[3]);
          $T = Byte($T + $RCx[0][$RCx[1]]);
          $K = $S[$C];
          $O[$C] = $K ^ $RCx[0][$T];
          $RCx[3] = $RCx[3] ^ $K;
        }
      $res[0] = $RCx;
      $res[1] = $O;
      return $res;
    }
  function RCxEncodeRaw($RCx, $val)
    {
      for($i=0;$i<strlen($val);$i++)
        {
          $ar[$i] = ord(substr($val,$i,1));
        }
      $ret=RCxEncodeRawRaw($RCx, $ar, $i);
      $str='';
      for($i=0;$i<strlen($val);$i++)
        {
          if($ret[1][$i]>15)
            {
              $str.=base_convert($ret[1][$i],10,16);
            }
          else
            {
              $str.='0'.base_convert($ret[1][$i],10,16);
            }
        }
      return $str;
    }
  function RCxDecodeRawRaw($RCx, $S, $count)
    {
      for($C=0;$C<$count;$C++)
        {
          $RCx[1] = Byte($RCx[1] + 1);
          $T = $RCx[0][$RCx[1]];
          $RCx[2] = Byte($RCx[2] + $T);
          $RCx[0][$RCx[1]] = $RCx[0][$RCx[2]] ^ $RCx[3];
          $RCx[0][$RCx[2]] = Byte($T - $RCx[3]);
          $T = Byte($T + $RCx[0][$RCx[1]]);
          $K = $S[$C] ^ $RCx[0][$T];
          $O[$C] = $K;
          $RCx[3] = $RCx[3] ^ $K;
        }
      $res[0] = $RCx;
      $res[1] = $O;
      return $res;
    }
  function RCxDecodeRaw($RCx, $val, $ofs)
    {
      for($i=0;$i<strlen($val)/2;$i++)
        {
          $ar[$i]=base_convert(substr($val,$i*2,2),16,10);
        }
      $ret=RCxDecodeRawRaw($RCx, $ar, $i);
      $val=$ret[1];
      $str='';
      for($j=$ofs;$j<$i;$j++)
        {
          $str.=chr($val[$j]);
        }
      return $str;
    }
  function RCxEncode($val, $key, $offs)
    {
      if($offs<0 || isset($offs)==false)
        {
          $offs=16;
        }
      $val=RandomString($offs).$val;
      $RCx=RCxInit($key);
      $ret=RCxEncodeRaw($RCx, $val);
      return $ret;
    }
  function RCxDecode($val, $key, $offs)
    {
      if($offs<0 || isset($offs)==false)
        {
          $offs=16;
        }
      $RCx=RCxInit($key);
      $ret=RCxDecodeRaw($RCx, $val, $offs);
      return $ret;
    }
  function RandomString($len)
    {
      $rand='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      $str='';
      for($i=0;$i<$len;$i++)
        {
          $str.=substr($rand,rand(0,strlen($rand)-1),1);
        }
      return $str;
    }
  function Hex16ToHex32($hex)
    {
      $hex32='0123456789ABCDEFGHKLMNOPRSTUVWXZ';
      $key='';
      $hex=strtoupper($hex);
      for($i=0;$i<strlen($hex)/5;$i++)
        {
          $t=strpos($hex32,substr($hex,$i*5+4,1))+strpos($hex32,substr($hex,$i*5+3,1))*16+strpos($hex32,substr($hex,$i*5+2,1))*16*16+strpos($hex32,substr($hex,$i*5+1,1))*16*16*16+strpos($hex32,substr($hex,$i*5,1))*16*16*16*16;
          $res[1]=substr($hex32,RoundD($t/(32*32*32)),1);
          $t%=32*32*32;
          $res[2]=substr($hex32,RoundD($t/(32*32)),1);
          $t%=32*32;
          $res[3]=substr($hex32,RoundD($t/32),1);
          $t%=32;
          $res[4]=substr($hex32,$t,1);
          $key.='-'.$res[1].$res[2].$res[3].$res[4];
        }
      return substr($key,1);
    }
  function Hex32ToHex16($hex)
    {
      $hex32='0123456789ABCDEFGHKLMNOPRSTUVWXZ';
      $key='';
      $hex=strtoupper($hex);
      for($i=0;$i<strlen($hex)/5;$i++)
        {
          $t=strpos($hex32,substr($hex,$i*5+3,1))+strpos($hex32,substr($hex,$i*5+2,1))*32+strpos($hex32,substr($hex,$i*5+1,1))*32*32+strpos($hex32,substr($hex,$i*5,1))*32*32*32;
          $res[1]=substr($hex32,RoundD($t/(16*16*16*16)),1);
          $t%=16*16*16*16;
          $res[2]=substr($hex32,RoundD($t/(16*16*16)),1);
          $t%=16*16*16;
          $res[3]=substr($hex32,RoundD($t/(16*16)),1);
          $t%=16*16;
          $res[4]=substr($hex32,RoundD($t/16),1);
          $t%=16;
          $res[5]=substr($hex32,$t,1);
          $key.=$res[1].$res[2].$res[3].$res[4].$res[5];
        }
      return $key;
    }
  function RCxEncode32($val, $key, $offs)
    {
      $val=strlen($val).'|'.$val;
      while((strlen($val)+$offs) % 5 != 0)
        {
          $val.='0';
        }
      return Hex16ToHex32(RCxEncode($val, $key, $offs));
    }
  function RCxDecode32($val, $key, $offs)
    {
      $val=RCxDecode(Hex32ToHex16($val), $key, $offs);
      $i=0;
      $c='';
      while(substr($val,$i,1)!='|')
        {
          $c.=substr($val,$i,1);
          $i++;
        }
      $i++;
      return substr($val,$i,$c*1);
      while(substr($val,strlen($val)-1,1)==chr(0))
        {
          $val=substr($val,0,strlen($val)-1);
        }
      return $val;
    }
  function Encode($value,$password)
    {
      return RCxEncode32($value,$password,12);
    }
  function Decode($value,$password)
    {
      return RCxDecode32($value,$password,12);
    }
?>

Aufruf mit Encode und Decode;
Vorteil: Selbst bei gleicher Query wird etwas anderes übertragen (Nur Zeichen von 0 bis Z)
 
Zuletzt bearbeitet:

r3nt5ch3r

~ Allround pG ~

AW: Datenaustausch mit PHP über 2 Server

@
Der Algorithmus hat einen Fehler. Vielleicht hab ich auch was falsch gemacht, dann solltest du es mal genauer erklären^^

PHP:
    $encode = Encode('test', 'test');
    echo $encode.'<br>';
    echo Decode($encode, 'test');
Ausgabe (manchmal, bei rund jedem 10. mal):
LGS9-SM56-BRWP-GMS0-RN76-SPNW-M880-9H1B
testÈù‘
Ich würd einfach ein Passwort als $_GET['pw'] übertragen und prüfen^^
€: oder noch einfacher und sicherer: Die IPs festlegen die darauf zugreifen dürfen^^
 
Zuletzt bearbeitet:

stroyer

Aktives Mitglied

AW: Datenaustausch mit PHP über 2 Server

Ah danke, gut zu wissen. Festgelegte IP würde fast sogar am bequemsten gehen, sobald der Zugreifer eine fixe IP hat. Sobald der zweite Server aber an einem Proxy hängt, kann sein, dass er in einem gewissen Bereich nur den eigenen Proxy erkennt. Hier hilft wahrscheinlich ausprobieren.

EDIT: Problem bei meiner Verschlüsselung gelöst; chr(0) kann Probleme bereiten. PHP-Source ist schon aktualisiert.
 
Zuletzt bearbeitet:

womic2000

Nice Guy

AW: Datenaustausch mit PHP über 2 Server

@CIX88:

> Schneller wäre die Lösung beim ServerA die Datenbank für ServerB-Zugriff freizugeben

Das läßt leider der Betreiber des Web-Servers nicht zu.
 

womic2000

Nice Guy

AW: Datenaustausch mit PHP über 2 Server

@stroyer:

Ich habe da noch ein Config-File für ein PHP-Code, das folgende Angaben enthält:
- Datum wann das Programm zuerst gestartet wurde
- Datum wann die letzte Prüfung gemacht wurde
- Intervall in Tagen (die Prüfung soll z.B. alle 7 Tage durchgeführt werden)
- Referenznummer (diese identifiziert die Prüfung)

(Als Ergebnis der Prüfung kommt nur true oder false zurück).

Ich möchte aber nicht, dass der Benutzer irgendwie an den Daten rumfummeln kann. Dazu würde ich diese gerne irgendwie verschlüsseln.

Eignet sich dazu deine RC-Verschlüsselung auch ?

Ich würde dazu gerne einen PHP-Encoder verwenden, doch ich denke nicht, dass ich da Config-Files verschlüsseln kann, die sich ändern können.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.616
Beiträge
1.538.358
Mitglieder
67.536
Neuestes Mitglied
QuestionMark
Oben