2009-12-04 5 views
4

를 지정하지 내가 크론를 통해 PHP 파일을 실행하려면 다음 명령을 사용하고- 입력 된 파일이

php -q /home/seilings/public_html/dvd/cron/mailer.php 

문제는 내가 어떤 설정을 결정하는 실행에 포함 된 파일을 가지고 다음과 같이로드하십시오 :

if (!strstr(getenv('HTTP_HOST'), ".com")) { 
    $config["mode"] = "local"; 
} else { 
    $config["mode"] = "live"; 
} 

라이브 구성을로드해야 할 때 cron이 로컬 구성을로드 중입니다. 나는 절대 경로 대신 파일에 http : // URL을 사용해 보았지만 파일을 찾지 못했습니다. 그 안에 URL을 사용하려면 명령을 변경해야합니까? 스크립트가 명령 줄에서 호출 된 경우

답변

5

사용이 php_sapi_name() 확인 :

if (php_sapi_name() === 'cli' OR !strstr(getenv('HTTP_HOST'), ".com")) { 
    $config["mode"] = "local"; 
} else { 
    $config["mode"] = "live"; 
} 

이 코드 사용 "라이브"를 사용하여 명령 줄에하려면 : 당신이를 실행하면

if (php_sapi_name() === 'cli' OR strstr(getenv('HTTP_HOST'), ".com")) { 
    $config["mode"] = "live"; 
} else { 
    $config["mode"] = "local"; 
} 
+0

내가 그것을 php_sapi_name()를 가지고 : – Webnet

+0

[code] if (php_sapi_name()! = cli '&&! strstr (getenv ('HTTP_HOST '), ".com")) { \t $ config [ "mode"] = "local"; } else { \t $ config [ "mode"] = "live"; 작동하지 않았습니다. 명령 줄을 통해 실행될 때 라이브를 사용해야합니다. – Webnet

+0

실행 중 라이브 대신 로컬 구성을로드했습니다. – Webnet

0

을 php with cron 그러면 환경 변수 'HTTP_HOST'이 설정되지 않거나 null이되고 null이 strstr 함수에 주어지면 strstr은 을 리턴하므로 그 모드가로 설정됩니다..

0

명령 줄과 비교하여 cron을 통해 명령을 실행할 때 환경 변수가 달라집니다. PHP 명령을 실행하기 전에 원하는 방식으로 환경을 설정하는 래퍼 스크립트를 작성해야 할 수도 있습니다.

7

또 다른 간단한 해결책 :

크론 :

php -q /home/seilings/public_html/dvd/cron/mailer.php local 

PHP : 당신이 웹 서버에서 PHP를 scrints을 실행하는 경우 다음과 같은 HTTP_HOST 만 존재

if (!empty($argv[0])) { 
    $config["mode"] = "local"; 
} else { 
    $config["mode"] = "live"; 
} 
0

환경 변수. 하지만 crontab config에 수동으로 추가 할 수 있습니다.

## somewhere in crontab config 
HTTP_HOST=somthing.com 
15 * * * * /path/to/your/script > /dev/null 2>&1 

이렇게하면 스크립트가 프로덕션 환경에서 실행되고 있다고 생각할 수 있습니다. '===

lynx -dump http://url.to.your.script > /dev/null

+0

이것은 필요한 것의 반대입니다.com은 cron에서 실행할 때 스크립트가 동작하도록합니다. – Jim

+0

"라이브 구성을로드해야 할 때 cron이 로컬 구성을로드 중입니다"- 내 솔루션이이를 수정합니다 ("라이브"구성이 cron에서로드 됨) –

0

당신은 게으른 기분과 모든 ENV 변수를 사용 크론 실행을 시도 할 수도 작동 확인하는 기분하지 않는 경우 cli '는 그것이 커맨드 라인인지, 즉 내가 필요로하는 의미인지 확인합니다. = .... 나는 그것을 테스트 할 것입니다. .....
+0

wget은 Lynx보다 더 의미가 있습니다. 그리고 이것은 게으른 해결책이 아닙니다. 웹 액세스만을위한 코딩은 웹 액세스와 cli 액세스를 모두 코딩하는 것보다 유지 관리가 쉽습니다. – jmucchiello

+0

네 말이 맞아. 나는 항상 Lynx를하는 데 익숙하다. 동일한 결과를 얻으려면 wget 인수가 필요합니다. wget -q -O - http://webvuln.com>/dev/null – pcp

관련 문제