php는 exec가 wget+mysql 명령에서 결과를 반환하기 위해 기다리고 있습니다.
문제
관련된: 여기를 봐
이 명령이 있습니다.
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") & echo \$!");
위의 명령은 제대로 작동하지만 PHP는 다음 다운로드로 진행하기 전에 비디오가 다운로드를 완료하기를 기다립니다. 그러나 다음 줄은 다운로드를 백그라운드로 보냅니다. 이는 이전 줄에서 달성하려는 것입니다.
exec("wget -O http://domain/file.zip &>/dev/null & echo \$!");
다운로드를 백그라운드로 보내기 위해 위의 첫 번째 줄을 변경하려면 어떻게해야합니까?
해결책
프로세스를 배경으로 사용하고 모든 출력을 리디렉션하도록해야합니다. 따라서 추가해야합니다
> /dev/null 2>&1 &
당신의 명령의 끝에. 따라서 다음과 같은 것으로 끝나야합니다.
exec("(wget -O http://domain/file.zip && mysql -u user -ppassword database -e \"UPDATE \\`table\\` SET \\`status\\` = 'live' WHERE \\`id\\` = '1234'\") echo \$! > /dev/null 2>&1 &");
편집하다
더 간단하게 만들려면 WGET와 업데이트를 EXEC로 호출 할 다른 PHP 파일로 이동할 수도 있습니다. 그래서 당신은 끝날 것입니다
exec("php NewFile.php > /dev/null 2>&1 &");
제휴하지 않습니다 StackOverflow