2011年01月30日

Flashファイルを動的生成 バイナリ変換

ひとまず、swfmill での xml ←→ swf の変換は保留にして、
swfファイルをバイナリ変換し、文字列を置換する方法をまとめる。

今回、こちらのページを参考にさせてもらいました。
参考というより、ほとんど同じ。。?

完成デモはこちら。
※生成後のFlashファイルを保存できるようにしました。

今回作成するデータは下記4つ。
・hello.swf
・make_swf.php
・get_swf.php
・swf_rep.php


処理の流れとしては、

1.make_swf.php にアクセスし、任意の文字列テキストを入力。
  ファイル生成ボタンを押す。(get_swf.php へ post)
2.get_swf.php 内で swf_rep.php を呼び出す。
  ※hello.swf をバイナリ変換し、文字列の置換を行う。
3.置換後に生成された swf ファイルをダウンロードする。
  ※get_swf.php の HTTPヘッダに、application/octet-stream を指定することで
   ブラウザから生成後の swf ファイルをダウンロードさせる。


■hello.swf の作成:

"Hello, world!" と表示させるだけの単純な swf ファイル。
※作成方法は、先ほどご紹介したこちらのサイト参照。

■swf_rep.php の作成:

実際にバイナリでの文字列変換を行うプログラム。
今回参考にさせていただいたサイトに、
ファイルがあるので、そちらを使用させてもらいます。
http://home.kanto-gakuin.ac.jp/~f0768085/index/public/d:hacks/n:3/dat:down/swf_rep.php.txt

■make_swf.php の作成:

post で入力したテキスト内容(word)を get_swf.php に送るページを作成します。

■get_swf.php の作成:
こちらも参考にさせていただいたサイトで公開されているソースを
多少変更したもの。

HTTPヘッダを3つ出力しています。

1. Content-Disposition: attachment; filename="ファイル名"
2. Content-Length: データサイズ
3. Content-Type: application/octet-stream

各ヘッダの働きとしては、

1. ブラウザにファイル名を教えます。
  ※ダウンロードダイアログに現れる名前。
2. ダウンロードするファイルのサイズをブラウザに教えます。
  ※これでプログレスバーが動きます。
3. application/octet-stream を指定することで
  ブラウザがダウンロードダイアログを開いてくれます。


<?php

include('swf_rep.php');
$data = file_get_contents('hello.swf');
$param = 'str';
$replace1 = 'Hello, world!';
$replace2 = $_POST['word'];

$data = swf_replace($data,$param,$replace1,$replace2);

header('Content-Disposition: attachment; filename="maked_swf.swf"');
header('Content-Length:'.strlen($data));
header('Content-Type: application/octet-stream');

echo $data;

?>

これで、テキストの置換を行うことは出来るようになりました。

また、進捗があれば報告します。

posted by MOGA at 18:03| Comment(0) | TrackBack(0) | モバイルFlash
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/43099075

この記事へのトラックバック