他のプログラミング言語ではよく見かけますが、対話形式のコマンドラインプログラムを作りたいと思ったことはないでしょうか?
実はPHPでも対話形式のコマンドラインプログラムを作ることができます。
以下がサンプルプログラムです。
<?php
ob_end_clean();
echo("足し算プログラム\n");
echo("一つ目の整数を入力してください。\n");
while (true) {
$num1 = fgets(STDIN, 10);
//デバッグ用に出力
var_dump($num1);
$num1 = rtrim($num1, "\n");
if (ctype_digit($num1)) {
break;
}
echo "整数を入力して下さい。\n";
}
echo "二つ目の整数を入力してください。\n";
while (true) {
$num2 = rtrim(fgets(STDIN, 10), "\n");
if (ctype_digit($num2)) {
break;
}
echo "整数を入力して下さい。\n";
}
echo "$num1 + $num2 = ";
echo (int)$num1 + (int)$num2;
?>
fgets()関数の第一引数に標準入力(STDIN)を指定しているところがポイントで、fgets()関数を実行したところで入力受付状態になります。
以下、注意点です。
- 出力バッファリングの無効化
出力バッファリングが有効になっているとプログラム終了まで何も表示されません。 サンプルプログラムではob_end_clean()で出力バッファリングを無効にしています。
他にも、このプログラム用のoutput_bufferingをOffに、output_handlerを指定しないphp.iniファイルを用意して、php -c オプションを使って実行する方法もあります。
- 入力データの整形
fgets()関数は最後に改行が入るので、必要に応じて取り除くようにします。
コマンドラインプログラムを作ることがあったら、使ってみてはいかがでしょうか?
この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。