2009-08-27 6 views
2

私は、リクエストなしでサーバ上でPHPスクリプトを実行する必要のあるサイトで作業しています。 これは、フルタイムではなく少なくともクライアントのアカウントを確認し、何かが発生したときにアラートメッセージをクライアントに送信します。クライアントリクエストなしでサーバ上で動作するphpスクリプト

どのようなアイデアが評価されます。

答えて

8

Linuxでこれを行う必要があると仮定すると、ブラウザーとCLIから任意のPHPスクリプトを実行することができます。

あなたは、単純なPHPスクリプトを実行可能性があります。このような <? echo "Ana are mere"; ?>

:あなたのコード、メモリリークまたは割り当てられていない変数内のクリープも php -f ./index.php

は、ファイルのアクセス権について注意してください、そしてどんなバグますプロセスが継続的に実行されるので、今すぐ非常に可視になります。

常にバックグラウンドで実行したくない場合は、定期的にジョブを開始できるようにcrontab(http://unixgeeks.org/security/newbie/unix/cron-1.html)を参照してください。

- edit--

php execute a background processを見てみるとPHP: How to return information to a waiting script and continue processing

は、基本的には、バックグラウンド・プロセスを開始する、とあなたは、exec()またはfsockopenの()または使用のいずれかにより、これを行うことがexec、またはソケット関数にアクセスできない場合は、おそらくこの順番で自分のスクリプトのfile_get_contents()を実行してください。 はまた、あなたはcronジョブを作成することができない場合ので、「バックグラウンドスクリプトが」ない「ブロック」要求とhttp://us2.php.net/manual/en/function.ignore-user-abort.php

3

あなたは自動的に無期限好きな間隔でスクリプトを呼び出すことができ、それをhttp://www.cronjobs.org/

を行うためにcronジョブを使用してください。あなたのホスティングプロバイダは、彼らが良い場合はそれらをサポートする必要があります。

また、ページの終わり

すなわち上で一意のキーを置くことを検討すべきです。 www.yoursite.com/cronjob.php?key=randomstring

キーが正しい場合にのみスクリプトを実行して、ボットや他のユーザーが実行したくないときにスクリプトを実行しないようにします。

+0

私はcronジョブを使用するために、アクセスする方法がないサーバーにアクセスする必要があると思いますので、PHPですべて行う必要があります – Ayoub

+0

PHPはスクリプト言語なので、コードを書くことはできません間隔を空けて自動的に実行されるようにします。それは何らかの方法で呼び出される必要があり、それを呼び出す最善の方法はCronを実行することです。 – Evernoob

+0

@Evernoob - "PHPはスクリプト言語です" - 例えば "C"でこれを行うことができますか?どのようだ?:) – Quamis

1

は、その後、あなたが欲しいものを行い、そのページを作成しますhttp://us2.php.net/manual/en/function.session-write-close.phpを見てみると、スケジュールを作成します他のマシン(たぶんあなたのPC?)に出て、毎日特定の時間にそのページにヒットします。

これは本当にハックですが、絶対にクローンジョブを設定できない場合は、オプションになります。

1

EvernoobQuamisは、cronジョブ(UNIX/Linux/Mac OS)またはスケジュールされたタスク(MS Windows)が必要です。さらに、PHPコマンドラインインターフェイス(CLI)を使用してPHPスクリプトを実行することもできます。この場合は、PHP実行ファイルとスクリプト名を呼び出すことができます。別の方法として、wget(すべてのプラットフォームで利用可能)のようなツールを使用して、誰かがWebブラウザのロケーションバーにURLを入力したかのようにPHPスクリプトを呼び出すことができます。

1

ここで想像しているように、PHPスクリプトを使用できませんでした。どこからのリクエストがあっても、それはApache経由で実行されるからです。

あなたのスクリプトでwhile(1)を実行しても、apache/phpは自動的にスクリプトを停止します。 あなたのコメントに答えるなら、あなたのウェブインターフェースがcronjobを追加できる場合を除いて、これを行うにはsshアクセスが必要です。

多分あなたは別のサーバ上のプログラムで実行され、その仕事をすることができるサービスを書くことができます。

1

サーバーにアクセスできない場合は、おそらく最も簡単な方法はブラウザを介してヒットすることですが、毎回同じ間隔でURLを入力する必要があります。また、スケジュールでローカルに実行され、ページにヒットするSeleniumテストスイートをセットアップすることもできます。 Seleniumで可能なら100%ではありませんが、それを実現するにはサードパーティ製のアプリが必要かもしれません。

PHPのプロセス制御関数(link)の使用については、他にも何か試してみてください。これらはデーモンであり、バックグラウンドで実行されるスクリプトを作成させます。スクリプトをサーバー上で実行し、プログラムされた間隔でコマンドを実行するには、これを行うことができます。あなたはそれが最初に(ブラウザの要求またはコマンドライン経由で)実行するために何らかの方法が必要です。

関連する問題