下記のスクリプトを「interactive.php」として保存。
#!/usr/local/bin/php -q <?php $name = "hoge"; $passwd = "1234"; set_time_limit(0); $stdin = fopen("php://stdin", "r"); // fopen に失敗した場合、これを記述しておかないと下の while で無限ループが発生する。 if ( ! $stdin) { exit("[error] STDIN failure.\n"); } while (true) { $input_name = ''; $input_passwd = ''; echo "Input your name: "; $input_name = trim(fgets($stdin, 64)); if ($input_name == '') continue; echo "Input ${input_name}'s password: "; $input_passwd = trim(fgets($stdin, 64)); if ($input_name == $name && $input_passwd == $passwd) { echo "Hello! $name\n"; break; } else { echo "[error] $input_name does not exist or invalid password.\n"; echo "Do you try again? [y/n]: "; if ('y' == trim(fgets($stdin, 64))) { continue; } else { exit; } } } fclose($stdin); ?>
スクリプトの仕様
正しく入力した場合
% php ./interactive.php % Input your name: hoge % Input hoge's password: 1234 % Hello! hoge
間違って入力した場合
% php ./interactive.php % Input your name: fuga % Input fuga's password: 1234 % [error] fuga does not exist or invalid password. % Do you try again? [y/n]: