Cake アプリケーションで URL に GET リクエストを送信する (またはコントローラーで関数を実行する) CakePHP の cron ジョブをセットアップしたいと考えています。ただし、ユーザーがこの URL にアクセスすると、悪用を防ぐために 404 が返されます。
どうすればこれを達成できますか? このようなものはうまくいきますか?
注:CakePHP 2.3.0を使用しています
Cake アプリケーションで URL に GET リクエストを送信する (またはコントローラーで関数を実行する) CakePHP の cron ジョブをセットアップしたいと考えています。ただし、ユーザーがこの URL にアクセスすると、悪用を防ぐために 404 が返されます。
どうすればこれを達成できますか? このようなものはうまくいきますか?
注:CakePHP 2.3.0を使用しています
これを行う最も簡単な (そしてかなり安全な) 方法は、ユーザー エージェントを確認することです。このようなもの (サンプルは、cron から "wget" を使用していることを前提としています)。crontab では、これを使用して毎時 7 分後に実行できます。
7 * * * * CD/tmp; /usr/bin/wget http://domain/controller/cron; RM クローン
cron ジョブが Web サイトと同じサーバーで実行されている場合は、「ドメイン」の代わりに「localhost」を使用できます。それ以外の場合は、ドメインの名前を使用します (例: "www.example.com")。「コントローラー」という単語を、cron メソッドを使用するコントローラーの名前に置き換えます。次に、コントローラーの PHP で:
public function cron() {
if (substr($_SERVER['HTTP_USER_AGENT'], 0, 4) != 'wget')
$this->redirect('/');
...
ユーザーエージェントを偽装するのは難しくないため、「合理的に」安全です。アプリについて詳しく知らずに 404 を生成する良い方法を提供することはできません (ただし、他の誰かがおそらくできるでしょう)。これであなたのホームページに送られますが、これで十分でしょう。
別の名前 (「cron」以外) を使用する場合は、忘れずに crontab と PHP を変更してください。
wget を呼び出してメソッドを呼び出すために cron を使用していない場合は、使用するメソッドが生成する任意のユーザー エージェント文字列にこれを適応させることができます。
それが私だったら、おそらく cron によって呼び出されるのに適切な時間であることも確認するようにします (例: 1 時間の 7 分の最初の 10 秒以内)。