PHP 5.3.0 で動作実験

PHP カンファレンスで SWF Editor の発表をした際に、

(Q) PHP 5.3.0 で使えますか

との質問に対して、

(A) 5.2.x でしか動かした事がないので、5.3 系はまだ未対応って事で。

と答え、課題として持ち帰っていたので調査。
結果としてはソースをいじらずに、そのままコンパイルできて、
そのまま動きました。
5.2.x の extension のインターフェースがそのまま使えるんですね。素敵。

以下は検証記録 (root権限を使わない検証方法)

PHP 環境準備:

php-5.3.0 を持って来てコンパイル

phpize
./configure --prefix=/home/yoya/tmp/php530
make install
cp php.ini-development /home/yoya/tmp/php530/lib/php.ini

でもって、以下の3行を php.ini に追加

extension_dir = "/home/yoya/tmp/php530/lib/php/extensions/no-debug-non-zts-20090626/"
enable_dl = On
extension=swfed.so

swfed インストール:

export PATH=/home/yoya/tmp/php530/bin:$PATH
./configure --with-zlib --with-png --with-gif
make install

動作結果:

% php -v
PHP 5.3.0 (cli) (built: Sep 13 2009 22:25:03)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
% php swfdump.php ~/flash/loveplus/player_01.swf
magic=CWS version=9 file_length=175589
rect=(0, 0)-(194, 300) (f_size=14)
frame_rate=12.0 frame_count=1
[0] tag=FileAttributes(69) length=4
[1] tag=SetBackgroundColor(9) length=3
[2] tag=Unknown(86) length=15
[3] tag=Unknown(82) length=103941
[4] tag=DefineShape(2) length=33
[5] tag=DefineSprite(39) length=16
[6] tag=DefineBitsLossless2(36) length=1229
image_id=3 format=5 width=45 height=45
argb bitmap exists
[7] tag=DefineShape2(22) length=299
[8] tag=DefineSprite(39) length=16
[9] tag=DefineSprite(39) length=62
[10] tag=Unknown(76) length=70
[11] tag=DefineBitsJPEG2(21) length=69689
image_id=7 jpeg_data_size=69687
SOI(0xD8): len=0
APP0(0xE0): len=14
APP12(0xEC): len=15
APP14(0xEE): len=12
DQT(0xDB): len=130
SOF0(0xC0): len=15
DHT(0xC4): len=416
SOS(0xDA): len=69055
EOI(0xD9): len=0
[12] tag=DefineShape2(22) length=84
[13] tag=PlaceObject2(26) length=6
[14] tag=PlaceObject2(26) length=20
[15] tag=ShowFrame(1)
[16] tag=End(0)

\(^O^)/

念の為に、JPEG 抽出も

% php swfgetjpegdata.php chara.swf 1 | strings | head -1
JFIF

\(^O^)/ \(^O^)/ \(^O^)/

トラブルシューティング:

Q. dl('swfed.so') すると dl(): Dynamically loaded extensions aren't enabled
A. php.ini に enable_dl = On を追加すれば直る
Q. dl('swfed.so') すると Temporary module name should contain only filename
A. php.ini に extension_dir = を追加すれば直るかも