PHP が次のテクノロジとシームレスに通信できるようにします:
(1) Flash および Flex Remoting
(2) JavaScript JSON および Ajax JSON
(3) XML および XML-RPC
RPC とは
リモート プロシージャ コール (RPC、リモート プロシージャ コール) は、クライアントとサーバーがデータを交換する方法です。さまざまなパラメーター メソッドのコールバックを使用してローカル オブジェクトを呼び出し、呼び出し結果を受け入れることができます。データの送受信の実装の詳細について心配する必要はありません。実装の詳細は通常、ネイティブ メソッドを呼び出しているかのように抽象的です。
AMFPHP の仕組み
クライアント側 (Flash/Flex) とサーバー側 (PHP) は、同じ方法を使用してメソッド呼び出しと複雑なデータを記述します。クライアントはリクエストをシリアル化し、ゲートウェイ AMFPHP に送信します。その後、AMFPHP は以下を実行します:
(1) リクエストを逆シリアル化
(2) 対応するリモート サービス クラスを検索
(3) クラスをインスタンス化
(4) セキュリティ チェックを実行
(5) (Using (指定パラメータ) サーバー側メソッドを呼び出します
(6) 返されたデータをシリアル化します
AMFPHP は、複合型データを正しくシリアル化および逆シリアル化できます。オブジェクトと配列に加えて、リソース データ接続リソースもサポートしています。つまり、リモート メソッドを呼び出して mysql_query を返すだけで、amfphp がすべて処理します。プラットフォームがサポートしている場合 (現在、Flash Remoting と Flex Remoting)、AMFPHP は循環参照とカスタム データを処理することもできます。また、単純なリモート デバッグもサポートしています。クライアント コードを作成する前にリモート サービスをテストできるブラウザーが付属する AMFPHP もあります。 AMFPHP 1.0.1 には、クライアント コードを自動的に生成するテンプレートも追加されています。 AMFPHP 1.9 ベータ版では、AMF3 のサポートが追加されています。
簡単な例
以下では、簡単なログイン例を通じて AMFPHP を予備的に理解します。クライアント側とサーバー側からそれぞれ紹介します。
1. Flex クライアント:
コード
コードをコピーします コードは次のとおりです:
import mx.controls.Alert;
import mx.rpc.remoting.mxml.RemoteObject;
public var login_remoteObj:RemoteObject = null; public function initLoginRemoteObject():void
{//RemoteObject の初期化
this.login_remoteObj = new RemoteObject();
this.login_remoteObj.source = "ログイン"
this.login_remoteObj.destination = " amfphp" ;
this.login_remoteObj.showBusyCursor = true;
this.login_remoteObj.endpoint = "http://localhost/MyTest/amfphp/gateway.php";
this.login_remoteObj.doLogin.addEventListener( "result "、loginHandler);
this.login_remoteObj.doLogin.addEventListener("fault"、faultHandler);
public function doLogin():void
{//ログイン操作、データの送信サーバーへ
var name:String = this.txtName.text;
var data:Array = new Array(); (名前) ;
data.push(pwd);
this.login_remoteObj.getOperation("doLogin").send(data);
}
パブリック関数 loginHandler(event: ResultEvent):void
{//サーバーから返された結果を処理します
var result:Array = event.result as Array;
var flag:String = result[0]
if (flag == "0) ") {
Alert.show("ログイン失敗: " result[1]);
} else if (flag == "1") {
Alert.show("ログイン成功: " result[ 1]);
} else if (flag == "-1") {
Alert.show("Exception: " result[1]);
}
}
パブリック関数aultHandler(event: FaultEvent ):void
{//エラー処理
Alert.show("申し訳ありません、問題が発生しました!!!")
}
}
2 、PHP サーバー側
1. MyTest プロジェクトのルート ディレクトリに amfphp フォルダーを配置し、ブラウザを開いて次のアドレスを入力して、amfphp が正常にインストールされているかどうかを確認します
http://localhost/MyTest/amfphp/gateway.php
amfphp は、このゲートウェイ サービス クラスを通じて私たちの位置を特定し、リクエストを処理のためにこれらのサービス クラスに転送します。2. Login.php ファイルには、ログイン要求を処理するための Login クラスが含まれており、このファイルは BusinessLogic ディレクトリ
Code
class Login { public function doLogin($data)
{$result = array ();
try {
$name = array_shift($data);
if ($name == "phinecos" && $pwd == " 123") {
$result[] = "1";
$result[] = "あなたは有効なユーザーです!";
} else {
$result[] = "0";
$ result[] = "ログインに失敗しました";
}
} catch (例外 $ex) {
$result[] = "-1"; ex-> getMessage();
return
}
?>
3. globals.php のサービス パス項目を次のように変更し、amfphp にサービス クラスが配置されているディレクトリを指定します
コードをコピーします コードは次のとおりです:
$servicesPath = "../BusinessLogic/";