バックグラウンドでPHPスクリプトを実行するためのユーティリティ

まえがき



おそらく、これはPHPコンソールでfork()を使用してプロセスをforkする方法に関する別の記事だと思うかもしれません。 しかし、残念ながら、コンソールもpcntl_fork()もここにはありません。PHPを備えたブラウザとサーバーのみです。



私はこのユーティリティを作成し(変数と呼びましょう)、必要に応じて(変数の名前については事前に謝罪します)、すべて類似したものが見つからなかったためです。

このユーティリティの意味は同じです-1日中(オプションとして)バックグラウンドで動作するスクリプトを実行します。 当然、そこにユーティリティなしでこれを行うことができますが、この場合、私たちは一度に数回スリップします(これらの場所の多くは知っていますが、それでも繰り返します):



「1つのファイル」アプローチには他にも多くの不利な点がありますが、この記事はそれについてではありません。



ユーティリティの説明



コンソールが使用されない理由、pcntl_fork()


ユーティリティを作成したとき、異なるサーバーで異なる条件で使用する必要があると予想しました。その場合、コンソールを使用すること(有料/無料ホスティング)およびPHPがApacheモジュールとして使用される条件(この場合、pcntl_forkについて)を常に使用できるとは限りません忘れることができます)。



動作原理


スクリプトはブラウザで作成/編集されます
電話/タブレットで作業する必要がある場合、またはサーバーへのFTPアクセスではない場合。 素晴らしいaceエディター(ajax.org)が使用されます。



スクリプト実行
起動するために、ブラウザはファイルを「プル」します。これにより、クラスがスクリプトの先頭に接続され、すべてが一緒に実行されます。 新しいプロセスを生成する一般的な方法。



スクリプトの進捗
スクリプトがリアルタイムで表示するすべてのメッセージを確認できます。

コンソール(ブラウザウィンドウ)にメッセージを表示するには、スクリプトが関数を呼び出す必要があります

$PDT->display("", "");
      
      



その後、ブラウザはコンソールファイルの変更に関するメッセージを受信し、ブラウザのコンソールを更新します。すでにメッセージが表示されています(説明するのに長い時間がかかります。興味がある場合は、このトピックに関する記事を書くことができます)。



スクリプトで無限ループを指定して開始するだけであれば、プロセスを停止することでのみ停止できます(PHPではできません)。 この状況を回避するには、関数を定期的に使用することをお勧めします

 $PDT->running();
      
      



スクリプトを停止し、ブラウザの適切なボタンをクリックした場合にfalseを返します。



スクリプトが何かを「盗聴」するように設計されており(何かが変わるまで無限ループ)、その遅延がない場合、すぐにプロセッサを眼球にロードします。 これを回避するために、関数が提供されています。

 $PDT->wait(1000);
      
      



これにより、ミリ秒単位の一時停止(この例では1秒に等しいミリ秒)が追加され、プロセスのステータスが「スリープ/待機中」に設定されます。



並行して動作する2つのスクリプト(およびそれ以上)は、互いにデータを交換できます。 ファイルはデータ交換に使用されました。

たとえば、関数と呼ばれる最初のスクリプト(最初)

 $PDT->write('', '');
      
      



最初のスクリプトの「メモリ」をリッスンした2番目のスクリプト(2番目)は、変更に気づきました

 $var = $PDT->read('first.');
      
      



そして何かを変えた

 $PDT->write('first.', ' ');
      
      





(この例はGitHubのスクリプトにあります)



コンソールからデータをスクリプトに転送できます。 この場合、スクリプトは入力をリッスンする必要があります

 $input = $PDT->input();
      
      







ご注意



このユーティリティは、一般的な使用のために、世界に出ることを考えずに作成されました。 誰かが便利になるかもしれないという考えのためだけにそれを投稿しました。



ユーティリティへのリンク(GitHub):

github.com/prineside/PDT



すべてのコンテンツを1つのフォルダーにドロップし、ブラウザーから入力するだけで十分です。



All Articles