アナログな方法だけど、実験でとりあえず動いたので自分用メモ。
クライアント鯖にswfmillやming系のモジュール等が入れられない、
厳しい環境で、phpで無理矢理swf内画像を入れ替える方法。
1.予めswf作成前に置換ターゲット先となるJPEGを任意のファイルサイズにしとく。
例えば2345バイトならダミーで1バイトづつ追加し3000バイトに偽装しとく。
(追加するダミー文字は「X:バイナリでは58」とする。)
≫参考:4.ファイル偽装の技術 ― 1.添付型
http://www.x68uec.org/other/press/2002/lecture/gisou.html
2.次に先ほど作成したJPEG(3000バイト)を使いFlashでswfを作成する。
これでテンプレートとなるswfが完成。
3.次に差し替え用画像も「1」と同様に3000バイト化しておく。
4.次にphp:unpackでswfをバイナリ展開。$swf_data_unpack
差し替え用画像もunpackでバイナリ展開。$img_data_unpack
5.そしてswfのバイナリ文字列からJPEG部分を探し出し差し替え用と置換。
例:
$swf_data_new =
eregi_replace(“ffd8ffe000104a464946(.*)58585858585858585858”,
$img_data_unpack, $swf_data_unpack);
//ffd8ffe000104a464946はJPEGのheader
//58585858585858585858はダミー追加した「X」の文字
6.そして置換済みのバイナリ文字:$swf_data_newをpack化し、
header→swfで出力したら画像が変わっている。お疲れ。
とりあれずできた。かなり無理矢理感とか危険度満載。
いろんな欠点があり柔軟性とか悪いけど、とりあえずこれで十分かな。
あとはもうちょっと安全に動くようにいろいろ改良していくさ。
この方法でいろいろサービス作れるな。ってことでおしまい。
(ここまでしてクライアントの要望に応える俺は・・・orz)