phpの標準入力の挙動php4とphp5の違いでハマる

久しぶりにxoops用のモジュールを作るのにextoolsをひっぱり出して使ってみたら、以前はたしかに問題なく使えてたのになぜか不具合発生。

原因はローカル開発環境を変えたことにより、extoolsが使うphpがphp4からphp5に変わったこと。

具体的にはaddviewコマンドを使用したときに、

レンダラークラスには何を使いますか?
        [X]oopsテンプレート,[S]marty,[P]hpテンプレート,[N]使わない -->p

テンプレートファイル名を入力して下さい。
(ボディ名のみで構いません。自動合成します)。
        [例] editnews_success -->


の最後の部分でテンプレートファイル名を入力しないうちにコマンドが終了してしまい、結果テンプレートファイルが生成されない、という状況。


どうやら下のブログの方によると、


STDINかそのあたり - masahilog

$fp=fopen("php://stdin","r");


が2度あると2回目の入力待ちが発生するはずの時点ですでになんらかの入力があるとみなされてしまうようだ(あ〜助かりました)。


なのでたとえば

<?php
$fp=fopen("php://stdin","r");
$file=fgets($fp,4096);
fclose($fp);
?>


となっているのを

<?php
$file=fgets(STDIN,4096);
?>


と修正することでこの不具合は解消される(された)。

extoolsって?

ちなみにextoolsはXOOPS2.0系列のモジュール作成用のツール。


現状事実上XOOPSCUBEの開発をメインでやってらっしゃるminahitoさんが開発したツールで、たぶんmojaviを見本に作成されいてる。ツールのイメージとしてはたぶんrubyのrakeとか、cakephpのbakeとか、そんな感じのイメージのモジュールスケルトン生成CUIツール。


ダウンロードはこちら↓
extools


一緒にexframeっていうのも必要
exframe


ここにマニュアルがある↓
XOOPS Cube Site - チュートリアル-extools-Wiki


ちなみに昔はもう少し詳しい解説記事が作者のminahitoさんのページにありましたが古いものは消して上のページのみみたいです(結構リファレンスとして参照していたので個人的には復活希望ですが、なんせ昔の記事なんでもうオリジナル記事もなくなってるかもですね)。


作者以外の方が書いたページで詳しいのはこちら
ITT-WEB - B-Wiki - extoolsメモ

今はcubson、だけど・・・

また、もうextoolsははるか昔に開発は停止され、現在はcubsonというXOOPSCUBE専用の後継ツールが開発されています。


ダウンロード
cubson


cubsonチュートリアル


cubson、とっても便利そうなんですが、XOOPS2.0系列ではcubsonで作ったモジュールは動かないみたい。


ということでXOOPS2.0系列では動くものを作るにはextoolsしかないので、泣く泣くいろいろ修正して使ってます〜。