PHP의 system()이 출력을 반환하지 않는 문제에 대한 해결책: 명령에 [2>& 1]을 추가하여 표준 오류를 표준 출력으로 리디렉션합니다(예: [exec('some_command --option 2> & 1',$output,$ret);].
이 기사의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!