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 스크립트는 계산기가 종료될 때까지 대기상태가 됨








Posted by bloodguy
,