パスワード入力後にforkする方法はいかがでしょうか。
PHP
1<?php
2// 認証を行う関数。実装して下さい。
3function auth($password){
4 return true;
5}
6
7echo 'パスワードを入力してください:';
8
9system('stty -echo'); // ユーザー入力の表示を消す
10$password = trim(fgets(STDIN));
11system('stty echo'); // 以降の表示を戻す
12echo "\n";
13
14if(!auth($password)){
15 echo "認証エラー:パスワードが違います。\n";
16 exit(-1);
17}
18
19unset($password);
20
21if(($pid = pcntl_fork()) == -1){
22 exit(-2);
23}else if($pid > 0){
24 // 親プロセス
25 echo "処理を開始しました。\n";
26}else{
27 // 子プロセス
28 fclose(STDIN);
29 fclose(STDOUT);
30 fclose(STDERR);
31 // 子プロセスで何か出力したいならDBやファイルに書き込むか他の通信手段を使う
32
33 sleep(10); // ここにhoge.php本来の処理を書く
34}
スクリプト起動
認証後、子プロセスが生まれ、親プロセスは終了します。
csh
1$ php hoge.php
2パスワードを入力してください: (パスワード入力)
3処理を開始しました。
子プロセス生存確認
上記のコードの場合10秒後に勝手に終了します。
csh
1$ ps
2 PID TTY TIME CMD
322541 pts/1 00:00:00 bash
423213 pts/1 00:00:00 hoge.php
523214 pts/1 00:00:00 ps
強制終了したい場合
尚、完全にフォアグラウンドで動作するスクリプトとして書き、パスワード入力後にバックグラウンドに送る方法もあります。
PHP
1<?php
2// 認証を行う関数。実装して下さい。
3function auth($password){
4 return true;
5}
6
7echo 'パスワードを入力してください:';
8
9system('stty -echo'); // ユーザー入力の表示を消す
10$password = trim(fgets(STDIN));
11system('stty echo'); // 以降の表示を戻す
12echo "\n";
13
14unset($password);
15
16if(!auth($password)){
17 echo "認証エラー:パスワードが違います。\n";
18 exit(-1);
19}
20
21sleep(10); // ここにhoge.php本来の処理を書く
スクリプト起動
認証後、処理を停止させる。
csh
1$ php hoge.php
2パスワードを入力してください: (パスワード入力)
3^Z (Ctrl+Z入力)
4[1]+ 停止 php hoge.php
バックグラウンドに送る
csh
1$ bg
2[1]+ php hoge.php &