PHP5.4.xでDIOを使う

■PHPのメジャーバージョンが上がり、5.4.xがリリースされた。文法に手が入るなど、ちょっと大きな変更らしい。現在使っている5.3.xはいずれメンテされなくなるだろうから切り替えておきたい。ただ、ちょっと心配なのは今使っているスクリプトがそのままで通用するかということ。特に今ZBのメッシュネットワークのゲートウェイでPHPからTTYのポートを叩いてZBeeとやりとりしているDIOモジュールが動かなかったりするとデバイスコントロールができなくなってしまう。DIOはPECLモジュールになっていて……PHP5.4.x向けに改修がかかっていないような。

 まずは普通にPECLでインストールしてみる。

# pecl install dio-0.0.5
downloading dio-0.0.5.tgz ...
Starting to download dio-0.0.5.tgz (18,754 bytes)
......done: 18,754 bytes
12 source files, building
   :
   :
   :
/tmp/pear/temp/dio/dio.c: In function 'zif_dio_open':
/tmp/pear/temp/dio/dio.c:99:54: error: 'struct _php_core_globals' has no member named 'safe_mode'
/tmp/pear/temp/dio/dio.c:99:103: error: 'CHECKUID_CHECK_MODE_PARAM' undeclared (first use in this function)
/tmp/pear/temp/dio/dio.c:99:103: note: each undeclared identifier is reported only once for each function it appears in
make: *** [dio.lo] Error 1
ERROR: `make' failed

 …エラーになった。

 エラーの原因になっているのは'safe_mode'というシンボル定義が無いことだけど、これはPHP5.4.xになり、safe_modeが無くなったため。

 grepしてみると、dio.cとdio_stream.cに問題のコーディングがあり、いずれも同じパターンを持っている。本処理前のチェックロジックの中で、機械的に'(PG(safe_mode) && !php_checkuid(filename, mode, CHECKUID_CHECK_MODE_PARAM))'という条件式が使われている。この条件式は本来のチェックに対する追加条件になっているようで、いずれも「safe_modeであるなら」というロジックになっている。PHP5.4.xではそのsafe_modeそのものがなくなるのだから、このチェックロジックは不要なので、条件文から外した。試しにコンパイルするとエラー無く通る。ただし、ダウンロードしたソースに手元でパッチを当てているのでpeclコマンドは使えない。

 手元でコンパイルし、インストールする手順はPHPのサイトに「phpizeで共有PECL拡張モジュールをコンパイルする方法」として公開されている。ソースファイルを修正したDIOのディレクトリに移動して、phpizeコマンドを実行する。
$ cd dio-0.0.5
$ phpize
configureファイルが作られるので、実行して、makefileを生成させる。prefixなどは適当に。
$ ./configure --enable-dio
動作確認のために複数のPHPをインストールしている場合はmakefileの中にあるphp関連のディレクトリ、EXTENSION_DIRやPHP_EXECUTABLEなどを確認しておいた方がいいかもしれない。makefileに問題なければmakeし、インストールする。
$ make
$ make install
インストールされたモジュールはphp.iniで指定した拡張モジュール用ディレクトリではなく、makefileのEXTENSION_DIRに配置されているので、コピーするなり、リンク張るなりする。
 最後にphp.iniでExtension=dio.soを有効にし、
$ php -v
 など実行して拡張モジュールのローディングにエラーが出なければOK。apacheモジュールとして取り込んでいる場合はapacheも再起動する。

 動作確認してみると、殆ど問題ありませんでした。ただ、PHP5.4.xで関数への引数に参照渡しが使えなくなり、その関係でシンタックスエラーが出ました。こちらで使っているスクリプトだと、プロセス間通信に使っているmsg_receiveの引数がエラーになりました。もともと参照渡しになっている関数ですが、この参照渡しを通常の引数渡しに直してやるとエラーもなく、機能にも問題ありませんでした。
 参照渡しが廃止になったことはマニュアルにはまだ反映されていないので、これはちょっとまずい状態のような気がします。いずれ対応されると思いますが。

Copyright (C) 2008-2015 Satosh Saitou. All rights reserved.
戻る
日記::一覧展開
2016.06
卒検突破 (2016.06.26)
急制動 (2016.06.05)
坂道発進 (2016.06.04)
2016.05
スラローム (2016.05.29)
一本橋 (2016.05.28)
半クラ (2016.05.22)
2015.12
2015.11
2015.08
2015.07
2015.06
2015.05
EF50mm F1.8 STM (2015.05.24)
Private Private (2015.05.17)
NTPを整備する (2015.05.02)
2015.04
2015.03
2015.02
潮つ路 (2015.02.22)
未見の星座展 (2015.02.07)
2015.01
PSYCO-PASS劇場版 (2015.01.18)
2014.12
DOMANI/シェル (2014.12.20)
PHPでDMC (2014.12.13)
jouornald (2014.12.07)
2014.11
五木田智央展 (2014.11.08)
2014.10
山口勝弘展 (2014.10.26)
コンタクト (2014.10.18)
ケース加工 (2014.10.11)
山形旅行で (2014.10.04)
2014.09
聖地巡礼 (2014.09.27)
SIAF 2014(3) (2014.09.20)
SIAF 2014(2) (2014.09.14)
SIAF 2014 (2014.09.13)
RaspberryPi B+ (2014.09.06)
2014.08
ヴァロットン (2014.08.09)
GODZILLA(2014) (2014.08.03)
絵画の在りか (2014.08.02)
2014.07
クロニクル1995 (2014.07.26)
SDHCカード集め (2014.07.20)
SDカード再び (2014.07.05)
2014.06
2014.05
駆動系の整備 (2014.05.25)
無限の可能性 (2014.05.24)
PIOON (2014.05.17)
2014.04
大洗 (2014.04.19)
2014.03
唯美主義 (2014.03.09)
写真の境界 (2014.03.02)
2014.02
星を賣る店 (2014.02.15)
日常/オフレコ (2014.02.01)
2014.01
ISCP (2014.01.11)
DOMANI/シェル賞 (2014.01.04)
2013.12
ターナー展 (2013.12.14)
2013.11
反重力 (2013.11.02)
2013.10
木の器 (2013.10.20)
2013.09
ヒステリシス (2013.09.28)
LOVE展 (2013.09.08)
宙色 (2013.09.07)
2013.08
3/4だった (2013.08.17)
福田美蘭展 (2013.08.11)
2013.07
Fedora19 (2013.07.20)
2013.06
Google Cloud Print (2013.06.30)
未来の記憶 (2013.06.16)
梅佳代展 (2013.06.15)
片岡珠子展 (2013.06.09)
椿会展 (2013.06.08)
空想の建物 (2013.06.02)
wiringPi (2013.06.01)
2013.05
2013.04
箱詰め終わる (2013.04.13)
母-娘、姉-妹 (2013.04.06)
2013.03
卒展めぐり (2013.03.30)
恵比寿映像祭 (2013.03.16)
XBeeで接続する (2013.03.10)
Fedora18 (2013.03.09)
Black (2013.03.03)
2013.02
Backupその後 (2013.02.24)
Backup (2013.02.17)
音と光 (2013.02.03)
実験工房 (2013.02.02)
2013.01
いろはにほう (2013.01.26)
燻製を作る (2013.01.19)
2012.12
外装に収める (2012.12.23)
MU (2012.12.22)
スモーク (2012.12.01)
2012.11
Whirl (2012.11.25)
MOTアニュアル (2012.11.18)
2012.10
MPL1151A1 (2012.10.07)
2012.09
(2012.09.16)
夢の光 (2012.09.08)
光のアート (2012.09.01)
2012.08
東京湾大回り (2012.08.26)
2012.07
.hack//VERSUS (2012.07.22)
具体展 (2012.07.21)
国吉康雄展 (2012.07.15)
2012.06
2012.05
DHT11 (2012.05.12)
2012.04
PHPでIPCを行う (2012.04.22)
DHCPを立てる (2012.04.14)
DNSを立てる (2012.04.08)
2012.03
IPv6を追加する (2012.03.17)
MTUを調整する (2012.03.11)
2012.02
ICO再び (2012.02.26)
Viewpoint (2012.02.25)
恵比寿・2 (2012.02.19)
イ・ブル展 (2012.02.18)
恵比寿・1 (2012.02.11)
2012.01
星霜 (2012.01.01)
2011.12
2011.11
美女採取 (2011.11.27)
アサーション (2011.11.20)
日常/ワケあり (2011.11.12)
XB24-BとXB24-ZB (2011.11.06)
2011.10
家電入れ替え (2011.10.23)
2011.09
湿度センサ (2011.09.25)
銀座線ライン (2011.09.17)
竜宮美術旅館 (2011.09.11)
2011.08
しろきもりへ (2011.08.27)
2011.07
免許更新 (2011.07.31)
2011.06
京橋、新橋 (2011.06.26)
シンセシス (2011.06.18)
撤収の準備 (2011.06.04)
2011.05
風穴 (2011.05.15)
PLATFORM (2011.05.14)
2011.04
水・火・大地 (2011.04.17)
2011.03
パーティクル (2011.03.19)
恵比寿映像祭 (2011.03.12)
カナリア (2011.03.06)
2011.02
『ソルト』 (2011.02.19)
豊島美術館 (2011.02.13)
2011.01
藝大先端2011 (2011.01.23)
幽体の知覚 (2011.01.01)
2010.12
PWMで赤外線 (2010.12.26)
2010.11
『水辺にて』 (2010.11.06)
2010.10
アショカの森 (2010.10.30)
補遺の庭 (2010.10.24)
2010.09
シッケテル展 (2010.09.26)
音を鳴らす (2010.09.12)
2010.08
ハーフ (2010.08.21)
発電所美術館 (2010.08.01)
2010.07
2010.06
『未来医師』 (2010.06.13)
会田誠巡り (2010.06.12)
2010.05
桑原漁港 (2010.05.16)
欲望のコード (2010.05.15)
『第9地区』 (2010.05.02)
2010.04
春の海 (2010.04.18)
春の錦帯橋 (2010.04.17)
『機龍警察』 (2010.04.11)
2010.03
虹ヶ浜 (2010.03.28)
菊川湖再び (2010.03.14)
『虐殺器官』 (2010.03.13)
梶取岬 (2010.03.07)
絵画の庭@NMAO (2010.03.06)
2010.02
湯野温泉 (2010.02.06)
2010.01
2009.12
菅野ダム行 (2009.12.20)
2009.11
neoneo展 part2 (2009.11.29)
2009.10
広島ノ顔@HMOCA (2009.10.18)
末武川ダム (2009.10.10)
2009.09
吉宝丸@広島 (2009.09.20)
2009.08
2009.07
下松 (2009.07.12)
T4 (2009.07.05)
2009.06
仙台 (2009.06.07)
蕪島 (2009.06.06)
2009.05
2009.03
2009.02
2009.01
2008.12
神津佐仮説 (2008.12.21)
AVR HTTPサーバ (2008.12.20)
風景るるる (2008.12.14)
2008.11
南志摩・宿浦 (2008.11.22)
志摩あたり (2008.11.01)
2008.10
『剣の名誉』 (2008.10.18)
2008.09
石内都 (2008.09.06)
2008.08
宮島・厳島 (2008.08.30)
精神の呼吸 (2008.08.24)
西国行き (2008.08.23)
ICMP Echo応答 (2008.08.16)
MACフレーム (2008.08.03)
2008.07
小さな世界 (2008.07.26)
早送り (2008.07.20)
屋上庭園・他 (2008.07.13)
夢みる世界 (2008.07.12)
2008.06
古都の残像 (2008.06.01)
2008.05
北陸行 (2008.05.30)
ないまぜ (2008.05.24)
SDカード再び (2008.05.11)
GPSロケーター (2008.05.04)
2008.04
2008.03
音が小さい (2008.03.30)
STILL/MOTION (2008.03.22)
IAMAS2008 (2008.03.16)
80.7MHz/81.3MHz (2008.03.09)
橋頭堡 (2008.03.01)
2008.02
1998.11
作成:2012.04.29
公開:2012.05.19

Valid XHTML 1.1

loading image reserved place