2017-12-30 39 views
1

간단한 이야기 ​​: PHP 스크립트 파일을 실행중인 경우에만 PHP $ _SERVER [] 변수를 사용할 수 없습니다. Windows 작업 스케줄러 예약 이벤트에서 가져옵니다.

두 서버에서 실행중인 PHP 버전 7.1의 Windows 2008 R2 서버가 두 대 있습니다. 저는 서버 # 1 '생산'과 서버 # 2 '개발'을 호출했습니다. 각 서버에는 자체 MySQL 데이터베이스가 있습니다.

MySQL 데이터베이스 읽기/쓰기를 위해 작성한 페이지에서 $ _SERVER [ 'SERVER_NAME']을 (를) 사용하여 스크립트를 실행중인 서버를 식별했습니다 (페이지가 개발 환경에서 실행중인 경우). 서버의 경우 개발 서버에서 MySQL 데이터베이스의 IP 주소를 사용하고 현재 서버가 프로덕션 서버 인 경우 프로덕션 데이터베이스 IP를 사용합니다.

나를 위해 완벽하게 작동합니다. Windows 작업 스케줄러를 사용하여 자동화 된 작업을 예약하는 경우는 예외입니다. 이 경우에는 데이터베이스에서 가져온 정보가 포함 된 전자 메일을 보내려는 단일 독립 실행 형 PHP 스크립트 파일을 만듭니다.

PHP 스크립트 파일에서 DB 결과에서 몇 가지 정보가 포함 된 이메일을 보내 : $ _SERVER의 브라우저 결과에서 페이지를 실행

  • [ 'SERVER_NAME은'] 정의되는 는 (선행).
  • Windows 작업 스케줄러는이 $ _SERVER 초래 PHP 페이지를 실행하는 경우
  • [ 'SERVER_NAME은']을 정의하지

사람 내가 .PHP 파일에 $ _SERVER [] 변수를 제공 할 수있는 방법을 알고시겠습니까 Windows Scheduled Taks (여기서 작업 스케줄러는 물론이 스크립트의 .php 파일에 대한 심판이있는 PHP.exe를 가리키고 있음)에 의해 실행되고 있습니까? 또는 스크립트가 실행되는 서버의 이름을 검색하는 $ _SERVER [] 변수 외에 다른 방법이 있습니까?

+0

. CLI에서 실행되는 스크립트에는 사용할 수있는 HTTP 서버 환경 변수가 없습니다. 래퍼 스크립트 등을 사용하십시오. – mario

+0

이것은 내가하는 일이다. 나의 스케줄 된 태스크는 curl을 사용하여 각 태스크를 위해 설계된 특정'api' 서블릿에 대해 서버에 http 요청을 보내는 작은 PHP 스크립트이다. – YvesLeBorg

+0

니스. 고맙습니다. – Reno

답변

0

당신은 환경 변수를 사용할 수 있습니다

echo $_ENV['COMPUTERNAME']; 

는 그냥 variables_orderE 같은 EGPCS로를 포함 php.ini 파일에 올바르게 설정되어 있는지 확인하십시오.

또는 :

echo getenv('COMPUTERNAME'); 
0
여기

내 CentOS는 솔루션입니다. Windows 솔루션과 조금 다릅니다. 그러나 같은 정신으로. 기본적으로 나는 단지 cron 작업에 서브 도메인 (서버 이름)을 붙인다. 그런 다음 로컬 호스트 또는 아파치에서 실행 중인지 확인하고 필요한 경우 $ cron_host를 서버 변수로 대체합니다.

크론 :

#crontab -u apache -e 
30 3 * * * php /var/www/vhosts/the/script.php -h=staging.domain.com -t=11:30 

cron_file.php :

// get hostname from varg 
$opts = getopt("h:t:"); 
$cron_host = $opts['h']; // which host to load from creds file 
$time_max = $opts['t']; // time parameter for database call 

creds_file.php :

작업 스케줄러과 거의가
$localhost = array('127.0.0.1', '::1'); 
$is_localhost = (!is_array($_SERVER) || !isset($_SERVER['REMOTE_ADDR']) || in_array($_SERVER['REMOTE_ADDR'], $localhost)) ? true : false; 
$cron_host = (isset($cron_host)) ? $cron_host : false; 
$host_name = ($is_localhost) ? $cron_host : ((isset($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']);