SWF から送られて来た変数に応じてデータを返す CGI スクリプト(PHP)の書き方
ヨロPICO!の試作がほぼ完成したところで、これをブログパーツのように簡単に設置できるようにするための作業に入る。
現在は、設定ファイルや顔写真の画像ファイルなどを設置先のサーバーに置いているのだけど、これでは設置の手間がかかる。HTML にコードをコピペするだけで導入できるようにしたいので、これらは全て yoropico.jp のサーバー上に置き、swf からのリクエストに応じて読み出せるようにする。
まずは設定ファイルをデータベースに保存し、SWF からのリクエストがあると DB から読み出した設定情報を返すだけの CGI を置いてみた(これは一応機能しているけど、DB にアクセスするため動作が遅いので改善が必要だけど・・)。
ちなみに、ActionScript から CGI に変数を送って、それに応じた返り値を取得するには、sendAndLoad() 関数を使う。下の例では、lv に送信したい変数をセットしてやり、返り値の受け皿として receiver_lv を指定している。
receiver_lv = new LoadVars(); receiver_lv.onLoad = function() { trace('receiver_lv.foo'); trace(receiver_lv.bar); }; lv = new LoadVars(); lv.my_var ='hoge'; lv.sendAndLoad("http://yoropico.jp/api/", receiver_lv, "POST");
受け取る側の PHP スクリプトでは、$_POST['my_var'] で変数の値を受け取ることができる(上記のコードの場合は 'hoge')ので、これを使って何か処理した結果を print() で返してやると、ActionScript 側では receiver_lv にセットされる。
<?php $my_var = $_POST['my_var']; $foo = some_function1($my_var); $bar = some_function2($my_var); print('foo='.$foo.'&bar='.$bar);//foo=some_foo&bar=some_bar ?>
このセットされた値は receiver_lv.foo, receiver_lv.bar のような形で参照できる。
実際には、上記の
lv.my_var ='hoge';
のところの 'hoge' に当たる文字列にはユーザーの ID などを入れる必要があり、これを SWF の中にハードコードするのでは使い勝手が悪いので、URL 変数を使って渡す方法を使っている(URL 変数を使って Flash に変数をわたすを参照)。
実行結果はこちら → http://yoropico.jp/sandbox/yoropico_test/yoropico_test04.html
注意点(crossdomain.xml)
ここで、SWF からの問合せを受け付ける側のサーバー(上の例では http://yoropico.jp/)には、ドメインのルートに crossdomain.xml を置いておく必要がある(crossdomain.xml のサンプルを参照)。
追記:
この記事がとても参考になります。