■構想検討
構想としましては
OSが異なるので、お互いAPIを用意し、API経由でデータを連携させるように構想しました。
お互いのOSからクロスで放り込む方法も見つけましたが
LINUX→SQLServerの場合、ドライバーをLINUX上にインストールする必要が発生する可能性があり
難易度が少し上がります。
■仕様
クロス同期つまり、ひとつの会社テーブルの情報を常に同期させる。ASP側で更新されたらLAMPにも更新するし
逆も同様にする。
■環境準備
LAMPのシステムとASP.NETシステムの環境のデータ同期ということ。
データベースの方は一緒。SQLServerのデータをMySQLに移行。
workbenchを使います。
データ変換には癖がありますが、何回か行っていると規則性が見えてきます。
■具体的なコーディング
お互いPOSTで渡す仕組みを実現します。
phpからASPへは
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
file_gets_contents関数です。 $url = $strHost.'/api/CompanyUpdate.aspx'; $data = http_build_query($data, "", "&"); //header $header = array( "Content-Type: application/x-www-form-urlencoded", "Content-Length: ".strlen($data) ); $context = array( "http" => array( "method" => "POST", "header" => implode("\r\n", $header), "content" => $data ) ); $contents = file_get_contents($url, false, stream_context_create($context)); if(!$contents){ //エラー時制御 } |
curlのライブラリから行ったほうが実績があったのですが、
なるべく標準関数(curlもすでに共通ですが)で行った方が望ましいかと考えました。
ASPからphpへは
//バイト型配列に変換
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
string postData = "StrCompanyID=" + HttpUtility.UrlEncode(CommonUtil.Security.FromBase64(StrCompanyID.Value), enc) + "&StrPassword=" + HttpUtility.UrlEncode(StrPwd.Value, enc); byte[] postDataBytes = System.Text.Encoding.ASCII.GetBytes(postdata); System.Net.WebRequest req = // System.Net.WebRequest.Create(_url + "/api/set_entry.php"); System.Net.WebRequest.Create(_url + "/index.php?controller=ApiRev&action=set_update2"); /// //メソッドにPOSTを指定 req.Method = "POST"; //ContentTypeを"application/x-www-form-urlencoded"にする req.ContentType = "application/x-www-form-urlencoded"; //POST送信するデータの長さを指定 req.ContentLength = postDataBytes.Length; //データをPOST送信するためのStreamを取得 System.IO.Stream reqStream = req.GetRequestStream(); //送信するデータを書き込む reqStream.Write(postDataBytes, 0, postDataBytes.Length); reqStream.Close(); //サーバーからの応答を受信するためのWebResponseを取得 System.Net.WebResponse res = req.GetResponse(); //応答データを受信するためのStreamを取得 System.IO.Stream resStream = res.GetResponseStream(); //受信して表示 System.IO.StreamReader sr = new System.IO.StreamReader(resStream, enc); Console.WriteLine(sr.ReadToEnd()); |
POSTを&でつなげてPOST送信します。
メルマガ登録して、小技を身に着けてください。
メルマガ登録をお願いします。
素敵な?情報がいつもあなたに届くようになります。(itmnewsの記事が届きます。)お役に立つかどうかわかりませんが頑張りますっ。登録してみてください。