一つ前の記事で、実行の大まかな流れを説明した。
この処理を次の4つのPHPファイルで実現している。
submit.php, execute.php, result.php, download.php
■ submit.php
問題、ソルバ、引数などを選択し、execute.php に渡す。
また、実行フラグ($_POST[])を立てておく。
■ execute.php
1. auto refresh (1sec.毎)
2. 実行フラグ($_POST[])が立っていれば...
- ソルバ実行
- 実行中フラグ($_SESSION[])を立てる
3. 実行フラグ($_POST[])が立っていなければ...
- 実行中フラグ($_SESSION[])が立っていれば、実行中なのでソルバのstdout/stderrを出力する
- 実行中フラグ($_SESSION[])が立っていなければ、実行終了なので、result.phpへ移行
※$_POST[]で取得した実行フラグは明示的に引き継がない限り、auto refresh で消されることがミソ。
■ result.php
実行が終了すれば、こちらに移行してくる。
出力ファイルへのリンクと、実行結果を表示。
ぱっと見では [execute.php] と [result.php] の違いはないので、
ユーザからすると、リンクが増えて auto refresh が止まったように見える。
■ download.php
リンクをクリックすると出力ファイルをダウンロードできる。
この処理を次の4つのPHPファイルで実現している。
submit.php, execute.php, result.php, download.php
■ submit.php
問題、ソルバ、引数などを選択し、execute.php に渡す。
また、実行フラグ($_POST[])を立てておく。
■ execute.php
1. auto refresh (1sec.毎)
2. 実行フラグ($_POST[])が立っていれば...
- ソルバ実行
- 実行中フラグ($_SESSION[])を立てる
3. 実行フラグ($_POST[])が立っていなければ...
- 実行中フラグ($_SESSION[])が立っていれば、実行中なのでソルバのstdout/stderrを出力する
- 実行中フラグ($_SESSION[])が立っていなければ、実行終了なので、result.phpへ移行
※$_POST[]で取得した実行フラグは明示的に引き継がない限り、auto refresh で消されることがミソ。
■ result.php
実行が終了すれば、こちらに移行してくる。
出力ファイルへのリンクと、実行結果を表示。
ぱっと見では [execute.php] と [result.php] の違いはないので、
ユーザからすると、リンクが増えて auto refresh が止まったように見える。
■ download.php
リンクをクリックすると出力ファイルをダウンロードできる。