FLASHからPOSTしたXMLをPHPで受け取る
まずクライアント側で動かすFlash、clientSide.swfに次のようなasを書く。*1 *2
xmlSendAndLoad(); function xmlSendAndLoad():Void { var resXml:XML = new XML; resXml.ignoreWhite = true; resXml.onLoad = function():Void { trace_txt.text = resXml; } var reqXml:XML = new XML( '<request>' + '<element>content</element>' + '</request>' ); reqXml.sendAndLoad('serverSide.php', resXml); }
resXmlとreqXmlという2つのXMLオブジェクトを用意しておき、reqXmlをsendAndLoadメソッドでserverSide.phpに送信する。その返値をresXmlに格納し、ステージ上に配置したtrace_txtで表示する。という簡単な仕組み。
でも、これをserverSide.php側で、
<?php $fh = fopen('reqLog.txt', 'w'); fwrite($fh, var_export($_POST, true)); fclose($fh); print '<response>'; print '<element>content</element>'; print '</response>'; ?>
などとやっても、XMLデータは受け取れない。clientSide.swfが送信したXMLデータは、生データのままメモリのどっかに放置され、$_POSTの中には格納されてない。なにか別の方法で生データを取り出さなければ……。というわけで、
<?php $fh = fopen('reqLog.txt', 'w'); fwrite($fh, file_get_contents('php://input')); fclose($fh); print '<response>'; print '<element>content</element>'; print '</response>'; ?>
とすると、clientSide.swfから受け取ったXMLをreqLog.txtに保存し、クライアント側に返値用XMLを返してくれる。
file_get_contents('php://input')
こんなの普通分かんないよねー。
*1:ソースコードを色付けして記述する(シンタックス・ハイライト)記法がActionScriptに対応してない気がするのは気のせいか。…と思ったらあったよ。3年越しに発見したw