2017-09-25 12 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

좋은 god man, 그 파일을 모두 함께 사용하지 못하게하거나 public root 위에 놓고 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

잘못되었습니다. PHP 스크립트가 CLI를 통해 실행될 때'$ _SERVER [ "REMOTE_ADDR"]'는 설정되지 않습니다. – 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 
} 

문서 : calimero가의 대답에서 확장 내 연구의 결론으로 ​​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를 실행하는 웹 서버에 대한 컬 (curl) 요청 일 경우에만 답을 얻을 수 있습니다. 나는 그 사건들을 너무 빨리 버렸고, 나는 내 대답을 업데이트 할 것을 기쁘게 생각합니다. – Calimero

+0

그냥 내 사피가 cgi_fcgi를 반환 –

+0

사실, 실험은 당신이 @ Calimero, Php.net이 틀림없이 틀림 없었 음을 보여주었습니다. (?) 서버 측 결과에서 다른 비 cron 스크립트로 스크립트를 호출 할 때 내 대답을 편집했습니다. "cgi" –