討論區: 公開討論 (Thread #38131)

php7対応 (2016-10-18 16:52 by gonzo-boss #78897)

こんにちは。
ガラケー向けに活用させて頂いています!

php7で使用したいのですが、対応済みでしょうか。
input()を呼ぶと、Segmentation faultで毎回落ちてしまいます。

・SWF Editor:最新リビジョン98bfc80
・OS:CentOS7.2
・php:7.0.4
・Apache:2.4.6

gdbで調査し、tag->nextが読めてないっぽいのですが、力不足で解決できません。

#0 _swf_object_tag_close (tag_head=<optimized out>) at /var/tmp/swfed/src/swf_object.c:55
#1 swf_object_input (swf=0x7f42a7fb6cd8, data=0x7f42a9742018 "FWS\004\363X", data_len=22771)
at /var/tmp/swfed/src/swf_object.c:85
#2 0x00007f42acce9f5e in zim_swfed_input (execute_data=0x7f42ade15ad0, return_value=0x7f42ade15a40)
at /var/tmp/swfed/src/php7_swfed.c:334
#3 0x00007f42c001ad3b in ZEND_DO_FCALL_SPEC_HANDLER () at /usr/local/src/php/php-7.0.4/Zend/zend_vm_execute.h:842
#4 0x00007f42c00262a8 in zend_vm_call_opcode_handler (ex=ex@entry=0x7f42ade158b0)
at /usr/local/src/php/php-7.0.4/Zend/zend_vm_execute.h:49758

Re: php7対応 (2016-10-18 18:17 by yoya #78898)

おっと。PHP7 の要望が今まで一度もなかったのでもう swfed を使っている人いないのかと対応してませんでした。一応、PHP7 用でもビルド出来る程度には実装を進めたのですが、メソッドが単体で機能しつつclose 関連でセグフォ(多分デストラクタ処理で何かを踏んでる)する状況です。input のその動作は想定外です。。真面目に PHP7 対応します!
回覆: #78897

Re: php7対応 (2016-10-19 00:51 by yoya #78899)

github の方に PHP7 対応 PR を貰っていたので、そちらで対応しました。
https://github.com/yoya/swfed
https://github.com/yoya/swfed/commits/master

少し触った感じでは動作してそうです。
make test が通り次第、swfed-0.65 としてリリースします。
(久々すぎて環境の作り方を忘れていて、make test が通らないです。Makefile をいじる必要があるのは覚えているのですが。。)
回覆: #78897

Re: php7対応 (2016-10-19 10:23 by gonzo-boss #78902)

迅速なご対応ありがとうございます!

早速インストールして試したところ、Segmentation faultで落ちることはなくなりましたが、アニメーションが再生されません。

・アニメーションされず最初の状態で静止
・画像の差し替えはできている
・吐き出されたflashデータの中に、phpソースコードの一部が入っている
(テキスト表示した際、ほぼ文字化けしますが、一部読める部分があり明らかにソースコードの一部でした)

もう少し調べてみます。
回覆: #78899

Re: php7対応 (2016-10-20 02:40 by yoya #78910)

> ・アニメーションされず最初の状態で静止
こちらは恐らく対応できたと思います。

> ・吐き出されたflashデータの中に、phpソースコードの一部が入っている

swfed で phpのソースコードを取り込む場所はないので、恐らく PHP5 と PHP7 の違いの罠を踏んでるのではないかなと推測します。例えばこれとか > https://arjunphp.com/php7-removed-alternative-php-tags/
回覆: #78902

Re: php7対応 (2016-10-19 18:29 by gonzo-boss #78905)

引き続き試していましたが、画像のみ置換した場合は問題なく再生されました。

setActionVariablesで文字列や配列を代入した時のみ、アニメーションが壊れるようです。
数値の代入ならいくつでもOK、文字列や配列が1つでも入っているとNGという結果でした。
回覆: #78899

Re: php7対応 (2016-10-19 19:50 by yoya #78906)

> setActionVariablesで文字列や配列を代入した時のみ、アニメーションが壊れるようです。
> 数値の代入ならいくつでもOK、文字列や配列が1つでも入っているとNGという結果でした。

setActionVariables は、文字列を入れて◯、文字列以外(数値や入れる)だと×だと心当たりがあります。確認します。
回覆: #78905

Re: php7対応 (2016-10-20 00:47 by yoya #78908)

[メッセージ #78906 への返信]
> > setActionVariablesで文字列や配列を代入した時のみ、アニメーションが壊れるようです。
> > 数値の代入ならいくつでもOK、文字列や配列が1つでも入っているとNGという結果でした。
>
> setActionVariables は、文字列を入れて◯、文字列以外(数値や入れる)だと×だと心当たりがあります。確認します。

動作状況を確認しました。

["foo" => "bar"] は OK
["baz" => 1] は NG (何もしない)
[1 => "quu"] はセグフォで落ちる

なお内部的に、文字列以外の値(数や配列)が渡された時は文字列として扱う仕様(恐らく配列は "Array" という文字列になるかも?)ですが、変換せずに処理を進めて意図しない挙動になっています。修正します。
回覆: #78906

Re: php7対応 (2016-10-20 01:33 by yoya #78909)

> 動作状況を確認しました。
>
> ["foo" => "bar"] は OK
> ["baz" => 1] は NG (何もしない)
> [1 => "quu"] はセグフォで落ちる

この件、修正しました。HEAD では治っています。
https://github.com/yoya/swfed/commit/86c254746103dd653a339fb79a47d650e56d1d0b

// 実験コード
$obj = new SWFEditor();
$obj->input($swfdata);
$variables = ["fluit"=>"orange", "foo" => 777, 123 => "gogogo"];
$obj->setActionVariables($variables);
回覆: #78908

Re: php7対応 (2016-10-20 10:19 by gonzo-boss #78911)

修正ありがとうございます。

正常にアニメーション再生されました!
複数パターン試しましたが、問題なさそうです。

ご対応ありがとうございました!
回覆: #78909