これは簡単な質問かもしれませんが、私はPHPをかなり新しくしており、これを理解するのは苦労しています。だから少しの背景 - 私のスクリプトは、リモートマシン上で簡単なコマンドを実行できるWebベースのアプリケーションから呼び出されます。たとえば、ユーザーはボタンをクリックしてリモートマシン上のログファイルにアクセスし、出力をユーザーに表示します。今、接続の問題があり、ターゲットサーバ上でsshが正しく設定されていない場合、これは永遠にハングアップする可能性があり、sshはタイムアウトしません。 phpやfastCGIのタイムアウトよりも優れたエラーを表示するために、スクリプトを強制終了し、タイムアウトが発生する前にユーザが実行していたコマンドを表示したい。簡単にするために、IIS/FastCGI/PHPのタイムアウトがすべて5分に設定されているとします。スクリプトが開始されたときにタイマーを設定したいと思っています.4分45秒が経過したら、スクリプトを終了し、実行しようとしていたコマンドを表示するエラーメッセージを表示してトラブルシューティングを行います手動で簡単な例のスタブ/擬似コードでn時間が経過した場合、PHPスクリプトでタイマーを設定し、エラーメッセージを出力し、スクリプトを強制終了するには?
:あなたはBunsen、「PHPのための高度なオブジェクト指向プログラムの実行ライブラリー」を使用することができ
function StartTimer(){
//start timer
}
function RunComand($cmd, $timer, $timeMax){
//runs user command through ssh library and streams back output.
$output = sshLib($cmd);
//this is where i want to do my check on the timer. If run through ssh lib takes too long
//kill the script and return $cmd to display it to user.
if ($timer > $timeMax){
//kill script, output $cmd
}
return $output;
}
$cmd = $_GET['cmd'] //get users command
$timer = startTimer();
$timeMax = 285; //285 seconds is 4 min 45 seconds
$results = RunCommand($cmd, $timer, $timeMax);
素晴らしい、これは完璧です。私は実際にクエリ文字列からcmdパラメータを受け入れていない、私は例としてそれを使用した。既知の安全なコマンドは、ユーザーが選択したオプションに基づいて設定テーブルに格納された値から動的に構築されます。安全なコマンドだけを実行することができます。私は、cmdをスクリプト経由でポスト経由で送信するか、直接コールしてcmdをパラメータとして渡します。しかし、警告と優れた例をありがとう!私はpcntl_fork()を使って簡単な解決策を書くことに始めましたが、これは時間を節約します。再度、感謝します。 – user797963