phpの標準入力の挙動php4とphp5の違いでハマる
久しぶりにxoops用のモジュールを作るのにextoolsをひっぱり出して使ってみたら、以前はたしかに問題なく使えてたのになぜか不具合発生。
原因はローカル開発環境を変えたことにより、extoolsが使うphpがphp4からphp5に変わったこと。
具体的にはaddviewコマンドを使用したときに、
レンダラークラスには何を使いますか? [X]oopsテンプレート,[S]marty,[P]hpテンプレート,[N]使わない -->p テンプレートファイル名を入力して下さい。 (ボディ名のみで構いません。自動合成します)。 [例] editnews_success -->
の最後の部分でテンプレートファイル名を入力しないうちにコマンドが終了してしまい、結果テンプレートファイルが生成されない、という状況。
どうやら下のブログの方によると、
$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メモ