>백엔드 개발 >PHP 문제 >PHP의 system()이 출력을 반환하지 않는 경우 수행할 작업

PHP의 system()이 출력을 반환하지 않는 경우 수행할 작업

王林
王林원래의
2021-09-27 14:41:232488검색

PHP의 system()이 출력을 반환하지 않는 문제에 대한 해결책: 명령에 [2>& 1]을 추가하여 표준 오류를 표준 출력으로 리디렉션합니다(예: [exec('some_command --option 2> & 1',$output,$ret);].

PHP의 system()이 출력을 반환하지 않는 경우 수행할 작업

이 기사의 운영 환경: windows10 시스템, php 7, thinkpad t480 컴퓨터.

최근 작업을 하다가 우연히 'ls', exec()와 같은 일반적인 명령을 실행하면 문제가 없다는 사실을 발견했습니다. 예:

 exec('ls',$输出,$ retval); 
 var_dump($ output,$ retval); 
 // $ output包含文件名数组,retval === 0

하지만 다른 프로그램을 실행하려고 하면 출력을 얻을 수 없습니다.

exec('some_command --a_parameter',$ output ,$ retval); 
 var_dump($ output,$ retval); 
 // $ output包含一个空数组,结束$ retval === 0

명령줄에서 직접 명령을 실행하면 일부 줄이 인쇄됩니다. 명령 실행이 성공한 것으로 알고 있으며 결과(일부 파일 업데이트, 데이터 추가 등)도 볼 수 있지만 출력을 볼 수 없습니다.

exec() 함수는 표준 출력만 캡처합니다. 표준 오류가 항상 Apache 오류 로그로 전송되는지는 확실하지 않지만 가능할 것 같습니다.

유닉스 시스템을 사용할 필요가 없다면 실제로 명령에 2>& 1을 추가하여 표준 오류를 표준 출력으로 리디렉션할 수 있으므로 문제를 해결할 수 있습니다. 예:

 exec('some_command --option 2>& 1',$ output,$ ret);

권장 학습: php 교육

위 내용은 PHP의 system()이 출력을 반환하지 않는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.