SWFEditor Windows DLL

出来ました。バージョンは 0.47a (0.47 の開発途中)で、実際は 0.46 相当です。
Vista 上で、かつ 5.3.6しか動作確認していないので、もし他の環境で動いたという報告があると嬉しいです。

↑これを php module 置き場において dl('php_swfed.dll'); なり php.ini に追加設定するなりして下さい。置き場所間違えたら、多分エラーが正しい場所を教えてくれます。

一般的に使われそうな php.exe に組み込んでも動かなかったので、dll と一緒に build した php.ext 等と併せて zip にまとめました。

WindowsPHP の build 方法

本家の Wiki の手順で進めれば大体はうまくいきます。

cd C:\php-sdk            # ショートカットをコピーして work dir を C:\php-sdk にしとくと楽
setenv /x86 /xp /release # 黒字に暗い緑字に画面に変わる。読みにくい
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat php53dev
    • 。(ちなみに、setenv と phpsdk_setvars.bat はコンソールを起動する際に、毎回実行する)
  • C:\php-sdk\php53dev\vc9\x86 にソースとライブラリを展開
  • php ソースツリーにトップに移動して build 関連コマンドを実行
cd C:\php-sdk\php53dev\vc9\x86\php-5.3.6
buildconf # ソースツリーを漁って configure.js を構築する
configure # configure.js を実行してコンパイル条件を整える
nmake     # 実際のコンパイル&リンク

あと、手順に加えて以下の2つの対処が必要でした。

  • ext/calender/jewish.c からヘブライ語を除く。
  • ext/gd/config.w32 を編集して SHARED 対応する。(ext/zlib/config.w32 を真似)

WindowsPHP extension DLL の build 方法

  • ext/swfed にプログラムを置く
  • 必要なライブラリをばら撒く
    • png はヘッダを deps/include 以下に置く
    • giflib のライブラリとヘッダ
    • ライブラリは giflib.a.dll を giflib_a_dll.lib に改名して deps/lib に設置
    • giflib.def を ext/swfed 以下に置く。(でないと動作時に giflib-4.dll が必要になる)
  • ext/swfed/config.w32 を作成する (zlib や gd の config.w32 を真似する)
  • buildconf を実行
  • configure --enable-swfed=shared を実行
  • nmake
  • Release_TS 以下に php_swfed.dll が出来てます。

試行錯誤

  • コメントに日本語があるとマズイので全て英語にするか消す。 grep "[あ-ん]" *.[ch] で探した
  • 変数宣言はブロックの頭に置く必要があるので、そうする。
  • giflib は sourceforge のを利用したけど、static library が 〜.a で提供されていて、〜.lib に拡張子を変えたら認識してくれた。(認識されない場合でも build は通る、けど別途 giflib4.dll が必要になる)
  • config.w32 を編集して buildconf しても configure.js に反映されない事がある。nmake clean してやり直すとうまくいく。(謎)

動作環境

初め dll だけ公開したのですが、XAMPP でも公式PHP5.3でも動作しなかったので、自分がコンパイルした php.exe と合わせて一式 zip にまとめました。

XAMPP は build ツールのバージョン違い(VC6 != VC10)でエラーになり、公式PHP は単に動きませんとだけ表示されます。残念。