2011-01-12 4 views
3

나는 cron을 통해 실행하고 싶은 PHP 스크립트를 가지고 있습니다. 로컬 서버, QA 서버 또는 프로덕션 서버에서 스크립트가 실행 중인지 여부에 따라 다른 구성 정보를로드해야합니다. 문제는 스크립트가 cron을 통해 실행될 때 스크립트가 실행되는 환경을 파악하는 데 사용되는 식별 가능한 $ _SERVER 정보를 가지고 있지 않다는 것입니다.CRON으로 PHP 스크립트를 실행할 때 서버 정보를 확인하십시오.

제가 생각할 수있는 유일한 것은 cron 작업 자체가 스크립트에 매개 변수를 첨부하도록하는 것이 었습니다. 그러나 나는 그렇게 할 필요가없는 더 나은 방법이 있기를 바랬습니다. cron에서 스크립트를 실행할 때 스크립트가있는 서버를 식별하는 다른 방법이 있습니까?

감사합니다.

+0

서버가 어떻게 다른가요? IP 주소를 확인하고 경로의 존재, 파일의 내용을 확인하십시오 ... – Konerak

+0

'gethostname()'? –

+0

PHP 5.2에 있기 때문에 gethostname()을 사용할 수 없습니다. 그리고 $ _SERVER 변수없이 IP 주소를 얻는 방법을 모르겠습니다. 그렇지 않으면 서버가 동일한 코드로 설정되므로 경로 확인과 같은 작업을 수행 할 수 있지만 수동으로 삽입해야합니다. – SenorPuerco

답변

3

다음 문제를 해결합니다. 스크립트 환경 변수로 전달하십시오. 크론의 경우 (스크립트 실행) SetEnv SITE_NAME x1

:

#!/bin/bash 
export SITE_NAME=x1; 
php /path 
두 경우 모두

PHP 코드이 환경 변수를 얻을 수는 htaccess로/httpd.conf 파일의 경우

: getenv('SITE_NAME');

x1 - 예제 사이트 이름입니다. 가 실행되는 컴퓨터 이름을 반환합니다

+0

위대한 솔루션처럼 보이지만 그 환경 변수는 얼마나 영구적입니까? 상자가 다시 설정되면 사라지나요? – SenorPuerco

+0

.htaccess 파일 또는 서버 구성 (예 : httpd.conf)의 변수는 절대적으로 영구적입니다. bash 스크립트에서 변수는 PHP 스크립트가 실행되기 전에 모든 런타임에 설정됩니다. cron (직접 PHP 호출이 아닌)에서 쉘 스크립트를 실행하면됩니다. 따라서 솔루션은 "영구적"이며 오랫동안 나를 위해 올바르게 작동합니다. –

+0

오, 잠깐. 스크립트를 실행하기 전에 스크립트를 실행하면 변수가 바로 추가됩니다. 저건 완벽 해. 감사! – SenorPuerco

0

의 GetEnv ('컴퓨터 이름') ... 스크립트 테스트하기 위해 생산에 다른 일을하는 경우

그러나, 어떻게 당신이 그것을 생산에 정확하다는 것을 알 수 있습니까?

+0

이 함수는 시도 할 때 아무 것도 반환하지 않습니다. 그리고 스크립트는 다른 것을하지 않으며 단지 다른 설정 변수를 가지고 있습니다. 예를 들어, 데이터베이스 연결 정보가 다릅니다. – SenorPuerco

+0

요청 된 솔루션을 사용하여 적절한 구성 파일 (예 : 데이터베이스 연결 설정)을 선택할 수 있습니다. 나쁜 습관이 아닌 것 같습니다. 이 기술을 사용하여 사이트 이름을 검색합니다. 왜냐하면 다른 사이트가 하나의 코드 사본 (전용 서버의 가상 호스트 사용)에서 실행되기 때문입니다. –

관련 문제