Windows에서 PHP의 exec() 함수로 프로세스를 백그라운드로 실행시키는 건 불가능함.
하지만 Windows에서는 vbs 파일을 이용하여 프로세스를 백그라운드로 실행시킬 수 있는 방법이 있음.
참조: http://bloodguy.tistory.com/789
이 방법을 이용하여 우회적으로 PHP에서 exec()를 이용해 백그라운드로 실행시키는 방법.
// 실행시킬 커맨드를 받아 임시로 vbs 파일을 만들어 백그라운드로 실행시키는 함수
function runBackground($Cmd, $Arg='')
{
// vbs 내용 구성
$VbsScript = <<<EOS
Set WshShell = CreateObject("WScript.shell")
WshShell.Run """___CMD___""" ___ARG___, 0, false
Set WshShell = Nothing
EOS;
$VbsScript = str_replace('___CMD___', $Cmd, $VbsScript);
if ($Arg !== '') $Arg = ' & '.$Arg;
$VbsScript = str_replace('___ARG___', $Arg, $VbsScript);
// 임시경로에 임시 vbs 파일 생성
$VbsFilePath = sys_get_temp_dir().'\\'.uniqid().'.vbs';
file_put_contents($VbsFilePath, $VbsScript);
// 실행
exec($VbsFilePath);
// 임시 vbs 파일 삭제
unlink($VbsFilePath);
}
// 이건 계산기를 실행시키고 PHP 스크립트는 종료됨
runBackground('calc');
// exec('calc')를 이용하여 계산기를 실행시킬 경우 PHP 스크립트는 계산기가 종료될 때까지 대기상태가 됨
'PHP' 카테고리의 다른 글
[PHP] header() 로 redirect 했을 때 HTTP_REFERER가 사라짐. (0) | 2014.10.29 |
---|---|
[PHP] 에디트플러스에서 다른 IDE처럼 함수정의부분으로 이동하는 기능구현 (EditPlus jump to declaration) (2) | 2014.10.11 |
[PHP] Windows LoadAverage 알아내기 (0) | 2014.09.05 |
[PHP] CPU 코어수 확인 [Windows/Linux] (NumberOfProcessors) (0) | 2014.09.05 |
[PHP] Windows에서 proc_open 함수를 사용할 때 STDERR가 있으면 무한 blocking 되는 현상 (0) | 2014.08.29 |