1

私は現在、情報を収集して解析し、別のプログラムに送信し、出力を収集してユーザーに表示する PHP UI に取り組んでいます。

通常は問題なく動作します。ただし、他のプログラムが完了するまでに永遠にかかる場合があります (2 時間から 15 時間の間で、一晩実行して朝に終了しました)。ユーザーがプログラムをキャンセルできるようにする KILL ボタンを実装したいと思います。これは、完了するまでに永遠にかかるだけでなく、サーバーを拘束し、その間ユーザーが他の操作を実行できないようにするためです。

現在の設定方法は次のとおりです: page1.php はすべてのユーザー入力を収集します。page2.php はユーザー入力をチェックします。悪い場合は、エラーを出力します。入力に問題がなければ、それを解析し、システム コールで他のプログラムに送信します。これが行われている間、「計算中...」の gif が画面に表示されます。プログラムが終了すると、出力がページに表示されます。

最適には、キルボタンが計算中のgifと同時に(同時にのみ)表示されるようにしたいと思います。また、プロセスを強制終了できるようにしたいと思います(そして、プロセスが実行されたという事実を出力に反映させます)殺された)。

これまでのところ、いつでもどこでもボタンを表示させることができました。ただし、探している実際のキル機能を取得できませんでした。現在、クリック時に実行されるjavascript関数を備えたhtmlボタンを使用してボタンが作成されるように設定しています。そのJavaScript関数には、ターゲットプロセスを見つけてそれらを強制終了するシステムコールを含むphpコードが含まれています(システムコールは、ターミナルウィンドウで使用できるため、正常に機能することがわかっています)。

関連するコードは次のとおりです。

startload("calculating");
$opt->run_optimization($output);
stopload("calculating");

これにより、計算用の gif とキル ボタンが表示され、システム コールを実行する関数が実行され、計算用の gif とキル ボタンが削除されます。

system("./optimi/optimi < $infile > $outfile");

これは、他のプログラム (optimi) へのシステム コールです。

    print <<< KILLBUTTON

<br/>
<button type="button" onclick="kill();">Kill</button>
<br/>

<script type="text/javascript">
function kill(){
    <?php
    system("ps -Af | grep optimi | grep -v grep | awk '{print $2}' | xargs sudo kill"); 
    ?>
}
</script>

KILLBUTTON;

これは私のキルボタンですが、今のところ何もしていないようです。

optimi プログラムを書き直すことは、私がそれを書いたのではなく、それが書かれたプログラミング言語の経験がないことを考えると、私は絶対に避けたいことです.

ありがとう。

4

1 に答える 1

7

Web サーバーがブラウザとどのように対話するかを理解していないようです。

php を実行しているウェブ サーバーにリクエストを送信すると、ウェブ サーバーはリクエストされたファイルをロードし、関連する php コードを解釈してから、ブラウザにテキスト ファイルを送信します。

そのテキスト ファイルに JavaScript が含まれている場合、ブラウザはそれを解釈 / 実行しようとします。php コードを javascript 関数に入れて、ユーザーが何かを実行したときにそれが実行されることを期待することはできません。ページ上のすべての php は、ページが要求されたときに 1 回だけ実行されます。

ユーザーの操作に応じて php コードを実行したい場合は、問題の php スクリプトへの ajax リクエストをセットアップする必要があります。

于 2012-05-12T00:47:13.953 に答える