バックグラウンド:
現在、私たちの会社には、レポート作成を自動化するためのPHPベースのアプリがあります。それはこのように動作します:
- フォームを含むWebページは、ローカルに保存されるいくつかの構成を含むiniファイルを生成します
- PHP CLIスクリプトは、手順1で生成されたiniファイルを受け入れ、それに基づいて、インターネットからデータがフェッチされたドキュメントを含むディレクトリを作成します。(完了するまでに5〜10分かかります)
- 別のWebフォームは、フォルダーの内容を調べ、検証を行い、ディレクトリの内容をプレビューとして表示します。
これらのステップのいずれかの間で、ユーザー入力が必要であり、場合によっては、ユーザーがスクリプト2を中断して、一部のini値を修正する必要があります。
問題:
Webブラウザでcliスクリプトを実行して、ユーザーが[ビルド]ボタンをクリックした後、iniファイル(または配列)が生成され、2番目のスクリプトに自動的に渡されるようにします。ただし、そのスクリプトを独立して実行し(別の「スレッド」をシミュレート)、必要に応じてユーザーに割り込みを許可するために、スクリプトが実行しているすべてのことを詳細に記述します。コマンドラインでスクリプトを実行するようなもので、各ステップが詳細に記述されています。
AJAXを使用していますが、サーバーが応答を完了するのを待ってから、Webブラウザーに何かを出力します。src属性とコンテンツをjavascriptで操作できないため、iFrameも機能しません。
では、コマンドシェルの出力をどのように「シミュレート」できるでしょうか。正しい方向のヒントをいただければ幸いです。
注:スクリプトは常に「localhost」で使用され、リモートアクセスは必要ありません。
解決
推測に基づいて、私はさらに簡単なことをすることになりました:
- フォーム($ _POST)の内容をセッション変数$_SESSION['FORM']にダンプしました。
- ユーザーが「ビルド」ボタンをクリックしたときにtrueに設定される$_SESSION[form-complete]フラグを作成しました。
- $ _SESSION [form-complete]がtrueの場合、サーバーは、引数が以前にダンプされたセッション変数である「CLISCRIPT」を指すiframeを表示します。
- CLIスクリプトには
ob_implicit_flush(true); ob_end_flush();
、出力がキャッシュされないようにする機能もあります。 - スクリプトの最後で、$ _ SESSION変数はクリーンであり、セッションは破棄されています