ホームページ >バックエンド開発 >PHPチュートリアル >As3 は AMFPHP を使用して PHP と通信します

As3 は AMFPHP を使用して PHP と通信します

WBOY
WBOYオリジナル
2016-06-13 13:20:281006ブラウズ

As3 は AMFPHP を使用して PHP と通信します

出典: http://bbs.9ria.com/thread-65836-1-1.html

?

まず、具体的な構成について説明します。PHP バージョン: 5.2.5、Apache: 2.2.11、(または WAMP2.2)、amfphp: バージョン 1.9 (添付ファイルが提供されています) )、Windows XP システム。

注: amfphp のバージョンが異なると、php のバージョンが異なると競合します。具体的な検出方法は次のとおりです。Web ルート ディレクトリで amfphp を解凍した後、URL: http://localhost/amfphp/browser/ にアクセスします。エラーが報告されなければ、おめでとうございます。エラーが出る場合はamfphpのバージョンを変更してください。

テストした結果、上記の構成で問題は発生しません。

特定のプロジェクトでは、As3純粋なプロジェクトを使用することがあります。そのため、As3でもAmf通信がよく使用されます。今日はAs3での方法について説明します。 (flex と amfphp の通信に関する記事を以前に投稿しました。バックエンドのセクションを確認してください)
As3 側では、主なことは、まず AMF3 プロトコルの使用を選択することです。現在一般的に使用されている AMF0 は、以前のバージョンとの互換性が必要なため、ある程度の冗長性があります。
次に、connect メソッドを使用してバックエンド URL に接続します。
次に、特定の操作の成功または失敗に関連する サーバー からの戻り値を処理するために NetConnection.call() で使用される Responder オブジェクトを宣言します。
次に、NetConnection を使用して、バックグラウンド PHP クラスのメソッド (この例の HelloWorld.getData など) を呼び出しメソッドの 2 番目のパラメーターに忘れずに書き込みます。

レスポンダーの 2 つの関数パラメーターに注意してください。最初のパラメーターは、サーバーへの呼び出しが成功し、結果が返された場合に呼び出されます。例の 2 番目の onSuccess
では、サーバーがエラーを返した場合、この関数が呼び出されます。この例では、onError。

それでは、As3 側を見てみましょう:

package  {
    import flash.display.Sprite;
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;
    import flash.net.ObjectEncoding;
    import flash.net.Responder;
    /**
     * ...
     * @author 纳兰容若
     */
    public class AMFTest extends Sprite{
        private var netCon:NetConnection = new NetConnection();
        private var rsp:Responder = new Responder(onSuccess, onError);
        private var phpUrl:String = "http://localhost/amfphp/gateway.php";
        public function AMFTest() {
            netCon.objectEncoding = ObjectEncoding.AMF3;
            netCon.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
            netCon.connect(phpUrl);
            netCon.call('HelloWorld.getData', rsp);
        }
        private function onNetStatus(e:NetStatusEvent):void {
            trace("failed");
        }
        private function onSuccess(rspObj:Object):void {
            trace("ok: "+rspObj);
        }
        private function onError($rspObj:Object):void {
            trace("AMF client error.");
        }
    }
}

?

php 側:

<?php
class HelloWorld {
        /**
         * @desc 向用户表示友好问候
         * @access remote
         * @returns String
         */
        public function getData() {
             return "Hello World";
        }
}
?>

php ファイル は HelloWorld.php という名前で、D:webrootamfphpservices に配置されます。 (注: D:webroot は私の Web ルート ディレクトリです。この特定の設定は独自の設定によって異なります。)

リンクに問題がある場合は、次のエラーが原因である可能性があります:

?

致命的なエラー: C:wampwwwamfphpcoreamfappGateway.php の 357 行目で、「スタンドアロン Flash プレーヤーが無効になっています。これらの接続を許可するには、gateway.php を更新してください」というメッセージが表示された例外「VerboseException」が見つかりませんでした。 VerboseException: スタンドアロン Flash プレーヤーが無効になっているように更新してください。 C:wampwwwamfphpcoreamfappGateway.php の 357 行目の接続 コールスタック: 0.0003 374432 1. {main}() C:wampwwwamfphpgateway.php:0 0.0062 874840 2. Gateway->disableStandalonePlayer() C:wampwwwamfphpgateway.php:137 0.0062 8 75056 3.trigger_error() C:wampwwwamfphpcoreamfappGateway.php:357 0.0062 875720 4.amfErrorHandler() C:wampwwwamfphpcoreamfappGateway.php:357

?

現時点では、プロンプトに従い、gateway.php ファイルを開いて、元の 135 行目と 137 行目をブロックするだけです。

?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。