Php problem s komunikaciou
Php problem s komunikaciou
Please help me, som v koncoch. Potrebujem spravit v php komunikaciu medzi dvoma serverami, cize klient - server. Chcel by som to spravit cez XML-RPC ale dako sa mi to nedari rozbehat, potreboval by som priklad ako ma vyzerat server aj klient - aspon ukazka. Som si stiahol aj neaku triedu RPC pre php, ale dako mi to nejde. Prosim Vas dajte aspon daky odkaz jak na to, bo jak by ste riesili tu ... komunikaciu???
Takze klient aj server su v php. Ide o to, ze potrebujem spravit nieco taketo: Niekto ma na svojom webe (servery) umiestneny napr. CMS a z ineho servera sa budu stahovat aktualizacie pre dany CMS. Ide len o to, ze ked dany klient si bude chciet dane CMS aktualizovat, tak sa musi overit jeho seriove cislo v hlavnom servery - to potrebujem vyriesit, cize potrebujem, aby prebehla komunikacia medzi dvoma serverami a hlavny server mi posle odpoved, ci sa moze stahovat. Na webe som nasiel nieco, ze sa da pouzit na komunikaciu medzi dvoma serverami XML-RPC, alebo SOAP... len neviem jak na to ???
Ta komunikáciu by sa dala použiť funkcia fsockopen. Pomocou nej nadviažeme spojenie s druhým serverom (pomocou klasického http protokolu). Samozrejme treba urobiť nejaké zabezpečenie.
Vyskúšal som urobiť nejaké skripty a pridal som tam aj jednoduché zabezpečenie (možno by sa to dalo upraviť tak, aby každý server mal svoj tajný reťazec, aby sa dali na hlavnom servri zablokovať oddelene).
Toto prvé ulož ako check-update.php
Toto druhe ako check.phpSkús v tom skripte check.php zmeniť to číslo 3141529 na niečo iné (malo ba sa zobraziť chyba).
Vyskúšal som urobiť nejaké skripty a pridal som tam aj jednoduché zabezpečenie (možno by sa to dalo upraviť tak, aby každý server mal svoj tajný reťazec, aby sa dali na hlavnom servri zablokovať oddelene).
Toto prvé ulož ako check-update.php
Kód: Vybrať všetko
<?php
$salt = "pomocny retazec"; // tajny retazec (v oboch skriptoch musi byt rovnaky)
$id = isset($_POST['id']) ? $_POST['id'] : "";
$pwd = isset($_POST['pwd']) ? $_POST['pwd'] : "";
if ($id === "3141529") {
$result = md5("$salt$pwd");
} else {
$result = "BAD";
}
print("result=$result");
?>Kód: Vybrať všetko
<?php
function check_user($id)
{
$host = "localhost"; // toto bude treba upravit na adresu toho skriptu na overovanie (napr. www.pocitac.sk)
$port = 80;
$path = "/check-update.php"; // toto treba upravit na cestu+meno
$salt = "pomocny retazec"; // tajny retazec (v oboch skriptoch musi byt rovnaky)
$result = false;
$pwd = $random = strtolower(MD5(date("MdHis")));
$formdata = array("id" => $id,
"pwd" => $pwd);
$poststring = "";
foreach($formdata AS $key => $val){
$poststring .= urlencode($key) . "=" . urlencode($val) . "&";
}
$poststring = substr($poststring, 0, -1);
$fp = fsockopen("". $host, $port, $errno, $errstr, $timeout = 30);
if (!$fp) {
echo "$errstr ($errno)\n";
} else {
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: $host\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($poststring)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $poststring . "\r\n\r\n");
$response_ok = false;
do {
$response = fgets($fp, 1024);
$response_ok = $response_ok || substr_count($response, "200 OK") > 0;
} while(!feof($fp) && $response != "\r\n");
if ($response_ok) {
do {
$response = fgets($fp, 1024);
if (preg_match('/result=([0-9a-f]{32})/', $response, $matches)) {
$result = md5("$salt$pwd") === $matches[1];
break;
}
} while(!feof($fp));
}
fclose($fp);
}
return $result;
}
if (check_user("3141529")) {
echo "<b>Check:</b> OK";
} else {
echo "<b>Check:</b> Error";
}
?>