2012-10-30 4 views
0

exec() 함수로 PHP dev 서버를 시작하고 중지하려면 어떻게해야합니까? 내 BDD 테스트를 자동화하려면이 작업을 수행해야합니다. exec()로 PHP dev 서버를 시작하고 중지하는 방법

echo exec('php -S localhost:8000'); 

그래서 나는 PHP의 서버를 시작하고 내 테스트를 계속 실행 할 수있는 방법이 필요합니다

이 내 스크립트의 실행을 중지합니다. 그리고 나서 PHP로 막을 방법이 필요합니다.

+0

은 비록 함수 이름이 : 자살() 간부가 차단 호출이기 때문이다 –

+0

. 'proc_open'과 같은 것을 사용할 수 있습니다 : http://php.net/proc_open 또는'popen' : http://php.net/popen – igorw

답변

1

이 작동 :

private function _startDevelopmentServer($pidfile) 
{ 
    $cmd = 'cd ../../public && php -S 127.0.0.1:8027 index.php'; 
    $outputfile = '/dev/null'; 
    shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile)); 
    sleep(1); 
} 

private function _killDevelopmentServer($pidfile) 
{ 
    if (file_exists($pidfile)) { 
     $pids = file($pidfile); 
     foreach ($pids as $pid) { 
      shell_exec('kill -9 ' . $pid); 
     } 
     unlink($pidfile); 
    } 
} 
0

아파치를 중단하기 때문입니다. 이 명령은 stop 명령을 처리하지만 그 시점에 서버가 중지되었으므로 서버가 해당 명령을 구문 분석하지 않기 때문에 다른 명령을 처리 할 수있는 방법이 없습니다. 아파치를 멈추었다가 다시 시작한 셸 스크립트를 작성한 다음 PHP 코드에서 호출하십시오. 쉘 스크립트는 Apache가 중지 된 경우에도 계속 실행되어야합니다.

귀하의 서버가 Apache라고 가정합니다.

+0

Nope. 아파치와 전혀 관련이 없습니다. 그는 PHP 5.4에 내장 된 dev 웹 서버를 사용하고 있습니다. 그러나 PHP 밖의 배치 스크립트에서 서버를 시작하고 중지하는 말의 기본 제안은 아마도 올바른 해결책 일 것입니다. – SDC

+3

이것은 Apache와 아무런 관련이 없습니다. PHP 5.4에서 소개 된 내부 개발 웹 서버에 대해 이야기하고 있습니다. 내 대답을 확인, 나는 이것을 알아 냈다. –

관련 문제