PHP에서 exec()을 사용하여 서비스를 다시 시작하거나 MySQL 시간대 파일을로드하는 등의 작업을 수행하는 많은 명령 행 스크립트가 있습니다. exec() 자체는 아무 것도 출력하지 않지만 화면에서 실행중인 명령 중 일부는 ob_start()/ob_end_clean()에서도 억제 할 수없는 출력을 내포하고 있습니다. 예를 들어, 다음은 MySQL에 시간대 파일을로드합니다. 우리는 반드시 MySQLs 시간대 데이터를 최신 상태로 만들기 위해 주기적으로 실행 :PHP에서 exec() 호출 출력 억제하기
$command = 'mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql';
exec($command, $output, $result);
이 예에서, 내가 명령의 모든 출력이 $ 출력으로 기록 될 것으로 예상,하지만 난 여전히 다음과 같은 출력이 강제로 얻을 화면 :
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh87' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh88' as time zone. Skipping it.
Warning: Unable to load '/usr/share/zoneinfo/Asia/Riyadh89' as time zone. Skipping it.
...
이 출력을 억제하는 방법이 있습니까?/dev/null로 리디렉션하는 것은 PHP가 명령이 완료 될 때까지 기다리지 않고 처리를 계속하기 때문에 바람직하지 않습니다. 처리가 이루어지는 경우 단지 &
를 추가하지 있는지 확인에 영향을주지해야한다 표준 에러 만 재 지정 사전에
감사합니다,
~ JamesArmes
예제 코드가 작동하지 않는 이유가 궁금하다면 'stdout'만 캡처되기 때문입니다. 주어진 에러는'stderr'에 쓰여지는데, 이것은 캡쳐되지 않고 화면에 버려집니다. – etheros
PHP로 스크립트를 실행할 때 모든 출력을 억제 할 수있는 방법을 찾기 위해 Google을 통해이 스레드에 왔습니다. 내 솔루션은'exec()'호출을'ob_start()'와'ob_end_clean()'에 래핑하는 것이었다. –