2017-09-25 16 views
1

私はabc.tldのいずれかのフォルダにあるcrontab phpスクリプトを持っています。 問題はスクリプトでも、そのような可能性を排除するため (すなわちhttp://abc.tld/crontab.php)それを直接呼び出すことによって解雇される可能性があり、私が想定していることですが、私はphpスクリプトがサーバーによって呼び出されたのか、phpでリモートから呼び出されたのかを確認しますか?

if(isset($_SERVER['REQUEST_METHOD']) || isset($_SERVER['REMOTE_ADDR'])) 
    die('Never gonna happen!'); 

ような何かを行うことができます。しかし、正しい方法は何ですか? (.htaccessファイルを除く)

crontabエントリ:

0 12 * * 1 /usr/local/bin/php /home/pavellebedev/public_html/abc.tld/wp-content/plugins/easy-timesheet/kernel/cron/ezts_timesheet_notifications.php 
+2

良い神人、そのファイルを一括して無効にするか、公開ルートの上に置き、phpでその方法で呼び出します。 :) – ATechGuy

+0

[CronのみからPHPスクリプトを実行するか、cronからリクエストがあるかどうかを確認する]の可能な複製は可能ですか?(https://stackoverflow.com/questions/16702472/run-a-php-script-only-from-cron-or -check-if-request-from-cron) – rickdenhaan

+0

@ATechGuy、できません。 abc.tld内である必要があります。 –

答えて

0

重複How to check if a php script is being called by another script on the server?

答え:

あなたの要求を行ったクライアントのIPアドレスを与える$_SERVER["REMOTE_ADDR"]変数があるべき127.0.0.1スクリプトがサーバーから呼び出されたとき。

+1

が間違っています。 '$ _SERVER [" REMOTE_ADDR "]'はPHPスクリプトがCLIで実行されているときには設定されません。 – Calimero

+0

ああ、私はPHPファイルがウェブ使用のためだけに意図されていた可能性について考えていましたが、私の悪いものです –

+0

他の質問からの回答をコピー/ペーストしないでください。これに答える質問が見つかった場合は、これを複製としてマークする必要があります(また、複製としてマークする担当者がいない場合は、その代わりにコメントを残してください)。 –

2
if(php_sapi_name() == 'cli') { 
    // Called from command-line, maybe cron 
} elseif(php_sapi_name() == 'apache2handler') { 
    // Called from the apache2 webserver upon web request 
} 

ドキュメント:カリメロの答えからの拡張私の研究の結論としてhttp://php.net/manual/en/function.php-sapi-name.php

+1

これは、多くのありがとう –

1

、ここでのスクリプトはcrontabファイル(PHP 5.3+)によって呼び出されたことを確認する最も信頼性の高い方法です:

if(stripos(php_sapi_name(), 'cgi') === false || stripos(php_sapi_name(), 'cli') === false) die('Not cron'); 
+0

あなたの質問にcrontabエントリを偶然投稿できますか? CGI phpをCLIとして実行している(少し不便ですが)か、cronジョブがCGI phpを実行しているWebサーバーへのカール要求である場合にのみ、あなたの答えは意味をなさないでしょう。私はあまりにも早い時期にそれらの事件を捨てました、私は答えを更新することを嬉しく思っています。 – Calimero

+0

ちょうど、私のsapiはcgi_fcgiを返す –

+0

実際に実験では、@ Calimero、Php.netが間違っていなければならないことが示されています(?)私は、サーバー側の結果で別の非cronスクリプト"cgi" –

関連する問題