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 のサンプルを参照)。


追記:
この記事がとても参考になります。

Web技術/Flash + PHP - ゼンド・ジャパン株式会社 技術情報コンテンツ