flashのクロスドメインをphpで解決
久々にphpの話題です。
以前、yahoo画像検索APIを使ったアプリを作製したんだけど、クロスドメインのせいでWEBアプリにはなりませんでした。
別のサーバに置かれたxmlはflashのセキュリティの関係上、解析出来ないってやつですね。
いくつか解決方法があるのですが、そのうちphpを自鯖に置いて、読み込んだxmlを返すと言う方法がありました。
<?php $url = $_GET["url"]; if(isset($url)){ header("Content-type: application/xml; charset=UTF-8"); readfile($url); } ?>
名前を適当にload.phpなどとして、引数にxmlのurlを指定してやれば自分のサーバでxmlが読み込める手順です。
ただ、問題があります。この場合は複数の引数を持つapiのurlの場合、誤作動を起こします。
livedoorやyahooAPIなど、だいたい引数が多数あります。どうしたらいいのでしょうか?flash側でなんとかする方法もありますが、ここはphpの方を変えてみることにしました。
例にするのは
です。まず、http://weather.livedoor.com/forecast/webservice/rest/v1というurlに最低でもcityとdayというパラメータが必要なのがわかります。
flash側が送るurlデータは
load.php?city=パラメータ&day=パラメータ
です。http://weather.livedoor.com/forecast/webservice/rest/v1でなく同じサーバのload.phpであることに注目。
load.phpの中身は
<?php $city = $_GET["city"]; $day = $_GET["day"]; $url = "http://weather.livedoor.com/forecast/webservice/rest/v1"; $url .= "?city=".$city."&day=".$day; if($city && $day){ header("Content-type: application/xml; charset=UTF-8"); readfile($url); } ?>
これで目出たく違うサーバのxmlが読み込めた次第です。
このやり方の欠点はapiごとにphpを書き換えなければならないこと、セキュリティとかキャッシュの問題でしょうか。
まだよくわかりません。
とりあえず、私はこの方法で出来ました。近日天気予報アプリ公開。