私は、リクエストなしでサーバー上で実行されるphpスクリプトを必要とするサイトで作業しています。これは、クライアントアカウントをチェックし続け(フルタイムではなく、少なくとも1日に1回)、何かが発生したときにクライアントにアラートメッセージを送信するボットスクリプトです。
どんなアイデアでも大歓迎です。
私は、リクエストなしでサーバー上で実行されるphpスクリプトを必要とするサイトで作業しています。これは、クライアントアカウントをチェックし続け(フルタイムではなく、少なくとも1日に1回)、何かが発生したときにクライアントにアラートメッセージを送信するボットスクリプトです。
どんなアイデアでも大歓迎です。
Linuxでこれを行う必要があると仮定すると、ブラウザーおよびCLIからも任意のphpスクリプトを実行できます。
簡単なphpスクリプトを実行できます。
<? echo "Ana are mere"; ?>
このような:
php -f ./index.php
ファイルパーミッションに注意してください。コード内に忍び寄る可能性のあるバグ、メモリリーク、または未割り当ての変数は、プロセスが継続的に実行されるため、非常に目立つようになります。
常にバックグラウンドで実行したくない場合は、crontab(http://unixgeeks.org/security/newbie/unix/cron-1.html)を調べて、定期的にジョブを開始できるようにしてください。
- 編集 -
phpを見てバックグラウンドプロセスを実行し、 PHP:待機中のスクリプトに情報を返して処理を続行する方法
基本的に、バックグラウンドプロセスを開始する必要があります。これを行うには、exec()またはfsockopen()を使用するか、execまたはソケット関数にアクセスできない場合は、おそらくこの順序で独自のスクリプトでfile_get_contents()を使用します。 。また、http: //us2.php.net/manual/en/function.session-write-close.phpを確認して、「バックグラウンドスクリプト」がリクエストとhttp://us2.phpを「ブロック」しないようにします。 .net / manual / en / function.ignore-user-abort.php
cronジョブを使用して実行しますhttp://www.cronjobs.org/
スクリプトは、好きな間隔で無期限に自動的に呼び出すことができます。それらが良ければ、ホスティングプロバイダーはそれらをサポートする必要があります。
また、ページの最後に一意のキーを配置することも検討する必要があります
すなわち。www.yoursite.com/cronjob.php?key=randomstring
次に、キーが正しい場合にのみスクリプトを実行して、ボットや他のユーザーがスクリプトを実行したくないときにスクリプトを実行できないようにします。
cronジョブを作成できない場合は、必要な処理を実行するページを作成し、毎日特定の時間にそのページにアクセスするだけの別のマシン(PCなど)でスケジュールされたタスクを作成します。
これは実際にはハックですが、cronジョブを絶対に設定できない場合は、オプションになります。
EvernoobとQuamisが言ったように、cronジョブ(UNIX / Linux / Mac OS)またはスケジュールされたタスク(MS Windows)が必要です。さらに、PHPコマンドラインインターフェイス(CLI)を使用してPHPスクリプトを実行することもできます。その場合、PHP実行可能ファイルを呼び出してからスクリプト名を呼び出すことができます。別の方法として、 wget (すべてのプラットフォームで使用可能)などのツールを使用して、誰かがWebブラウザーのロケーションバーにURLを入力したかのようにPHPスクリプトを呼び出すことができます。
ここで想像するように、phpスクリプトを使用することはできませんでした。どこかからのリクエストでapacheを介して実行されるからです。
スクリプトでwhile(1)を実行しても、apache/phpはスクリプトを自動的に停止します。コメントに応じて、はい、これを行うにはsshアクセスが必要です。ただし、Webインターフェイスでcronjobを追加できる場合を除きます。
たぶん、あなたは別のサーバー上のプログラムで実行できるサービスを書いて、仕事をすることができます。
サーバーにアクセスできない場合、最も簡単な方法はおそらくブラウザを介してサーバーをヒットすることですが、それはあなたまたは外部スクリプトがあなたが望むときに毎日同じ間隔でURLをヒットする必要があります。また、スケジュールに従ってローカルで実行され、ページにアクセスするSeleniumテストスイートをセットアップできる場合もあります。Seleniumでそれが可能であれば、私は100%ではありませんが、それを実現するにはサードパーティのアプリが必要になる場合があります。
他に試すことができるのは、PHPのプロセス制御関数の使用について確認することです(リンク)。これらを使用すると、デーモンであり、バックグラウンドで実行されるスクリプトを作成できます。これを実行して、サーバー上でスクリプトを実行し続け、プログラムされた間隔でコマンドを実行できる場合があります。ただし、最初に実行するための何らかの方法(ブラウザー要求またはコマンドライン経由)が必要です。