2016-05-06 3 views
2

cronジョブからのみスクリプトを呼び出し、そのスクリプトを実行できるipsはないようにする方法はありますか?cronジョブからphpスクリプトを呼び出す - 他のすべてのipsを拒否する

携帯電話に通知を送信するスクリプトがあります。一日一回cronの仕事によって呼び出されることになっていますが、時には何かがそれを引き起こし、誰もしてはならないときに通知を受けます。私はそれを私のサーバーからのみ呼び出すように制限したいと思います。ブラウザやクモなどから呼び出すことができるようにしないようにするつまり

..

おかげ

+0

あなたのウェブルートにはありませんか? –

+0

同じ電話アプリ用の他のスクリプトを含むフォルダはありません。 –

+0

そのシステムに他のユーザーがいて、それらのスクリプトにアクセスできますか? –

答えて

2

スクリプトは、パブリックURLを介して利用可能であるように思われます。それをどこか別の場所に移動してください。たとえば、スクリプトが/www/site.com/public/script.phpの範囲内にあり、/www/site.com/publicがWebサーバーのパブリックディレクトリである場合は、/www/site.com/cron/script.phpに移動します。 Webサーバーがcronディレクトリからファイルをフェッチするように構成されていないことを確認します。

+1

設定を変更するためのアドバイスがあります640を許可し、彼らはそれが動作するはずだと思います。 –

+1

@PapaDeBeauはもちろん、適切な権限で動作します。しかし、パブリックディレクトリにCLIスクリプトを保存する必要がありますか? –

+0

いいえ、私はそれが何であるか分かりません。私は独学で常に学習しています。 :) –

4

このファイルを一般公開することはお勧めしません。

しかし、あなたの質問に直接答えてください。

if (php_sapi_name() === 'cli') {...}

詳細情報:https://secure.php.net/manual/en/function.php-sapi-name.php他人として

+0

うわー、これは驚くほど聞こえるよ。私は640に権限を変更しようとしています。私たちは明日見つけます。素晴らしいヒントをありがとう。 –

1

が書かれている、あなたが使用することができ、他のセットアップ、(権限とファイルの場所)があるかもしれませんが、これを行う方法は、以下のチェックを追加することです私は誰かに、彼らの全プロセスを一度の必要性を満たすために再設計するように指示したことはありませんでした。それはあまりにも犬のような尻尾のように感じます。したがって、あなただけの別のプロセスによって誤っていない、あなたのcronジョブで実行することができ、スクリプトを持っているしたい場合、私はあなたにこのソリューションを提供します


PHP_SAPIソリューションは、一貫性のない動作を提供するために、指摘しているされていますシステムの設定に特有のものです(例えば、コマンドラインからスクリプトを呼び出すときにechoを出力し、cronから呼び出すときにechoを出力します)。これにより、他のバグを追跡することができます。私が見て、使った最善の解決策は、スクリプトにコマンドライン引数を渡して、その引数の存在を評価することです。チェック場合

* * * * * * php /path/to/script --cron 

次に、スクリプト内であなたは満足していないとき、スクリプトを停止し、実行します:

あなたのcronジョブは、次のようになります。

if($argv[0] != 'cron') 
{ 
    //NO CRON ARGUMENT SUPPLIED, SOMETHING ELSE MUST BE CALLING THIS 
    exit; 
} 

は、いくつかのシステムでは、ので、あなたの個々のシステム構成に基づいて、あなたはこのことができます$argv[1]

希望を確認する必要があり、スクリプト名として最初の引数を使用することができることに、あなたが持っているなら、私に知らせていないテイク質問があれば、必要に応じて対応や編集ができます。

関連する問題