swftools for PHP

swftoolsPHP に 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_swftools.h と swftools.c に関数のエントリを作成
  • src/swfcombine.c をコピって来て main を書き換える

とりあえずは、PHP の arguments リストをそのまま main の argv に変換するだけ。

  • zend_parse_parameters に a を指定して PHP 配列を取得
  • 配列の要素数を数えて argc にセット& argv の格納場所を alloc
  • 配列を argv に入れ直して、その要素を convert_to_string_ex で文字列に変換

これだと exec してるのを使い勝手が変わらないので、
(プロセスを新規に作らないだけ)、PHP っぽいインターフェースを考え中。
とりあえず、ファイルを介さないとダメなのはダサいので、

ビルド

phpize
CFLAGS="-g -O2 -DSWFTOOLS_DATADIR=\\\"hoge\\\"" ./configure
make

現状

これから動作確認開始。

多分、動かないと思うけどファイルを晒します。

今のところ、
$args = array('-m', '/tmp/master.swf', '-s', '/tmp/slave.swf',
...);
$swfdata = swfcombine($args);
こんな感じで動かせるところまで持っていこうかと。