swftools for PHP
swftools を PHP に binding する試みを開始。
準備
とりあえず、php extension を作る際のイニシエーションの儀式。
% cd php-5.2.9 % ./ext_skel --extname=swftools % cd swftools % vi config.m4 % ./configure % make
詳しくはこっち ↓
HEAD の swftools をコピってきて同じディレクトリに置く
↓こんな感じ
swftools4ph |- php_swftools.h |- swftools.c |- swfcombine.c |- config.m4 |- swftools/
実装
とりあえず、swfcombine を。
とりあえずは、PHP の arguments リストをそのまま main の argv に変換するだけ。
- zend_parse_parameters に a を指定して PHP 配列を取得
- 配列の要素数を数えて argc にセット& argv の格納場所を alloc
- 配列を argv に入れ直して、その要素を convert_to_string_ex で文字列に変換
これだと exec してるのを使い勝手が変わらないので、
(プロセスを新規に作らないだけ)、PHP っぽいインターフェースを考え中。
とりあえず、ファイルを介さないとダメなのはダサいので、
現状
これから動作確認開始。
多分、動かないと思うけどファイルを晒します。
- http://diary.awm.jp/~yoya/data/2009/07/09/config.m4
- http://diary.awm.jp/~yoya/data/2009/07/09/php_swftools.h
- http://diary.awm.jp/~yoya/data/2009/07/09/swftools.c
- http://diary.awm.jp/~yoya/data/2009/07/09/swfcombine.c
今のところ、
$args = array('-m', '/tmp/master.swf', '-s', '/tmp/slave.swf',
...);
$swfdata = swfcombine($args);
こんな感じで動かせるところまで持っていこうかと。