2011-04-09 1 views
3

을 반환하지 않는, 간부는() 작동 미세 예 :PHP는 시스템()/간부()가 '1!'와 같은 일반적인 명령의 출력

exec('ls',$output,$retval); 
var_dump($output,$retval); 
// $output contains an array of filenames, and retval === 0 

그러나 다른 프로그램을 실행하려고 할 때, 나는 '수 출력을 얻으십시오 :

exec('some_command --a_parameter',$output,$retval); 
var_dump($output,$retval); 
// $output contains an empty array, end $retval === 0 

이 명령은 명령 행에서 직접 실행할 때 일부 행을 인쇄합니다. 결과 (일부 파일이 업데이트되었거나 추가 된 데이터 등)로 인해 명령이 성공했음을 알고 있지만 출력을 볼 수 없습니다.

아이디어가 있으십니까?

응용 프로그램이 경고를 발견 된 일부 * 이유 (치명적인되지 내부 뭔가)에 대한

내 솔루션 경우 모든 출력은 아파치/error_log에 전송되고 있었다

+0

문제가있는 명령이 실제로 출력을 인쇄합니까? – Khez

+0

명령 행에서 직접 수행 할 때 수행됩니다. 화면에 몇 줄의 텍스트가 나타납니다. 어쩌면 다른 유형의 출력이 있을까요? – HappyDeveloper

+0

실제 명령은 무엇입니까? – Charles

답변

19

프로그램이 표준 출력이 아닌 표준 오류로 경고를 출력하는 것처럼 들립니다. exec은 표준 출력 만 잡습니다. 나는 표준 오류가 항상 아파치 오류 로그로 보내지는 것을 확신하지 못하지만 가능성이 높습니다.

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

이 모두가 당신의 PHP에 사용할 수있는 경고를해야한다 : 당신이 비 * 괜찬아 시스템과의 호환성이 필요하지 않은 경우

, 명령에 2>&1을 추가하여 표준 출력 표준 오류를 리디렉션 할 수 있습니다 불필요한 로깅을 방지하십시오.

+1

2를 추가하고 & 1을 출력하지만 여전히 출력은 배열에서 비어 있습니다. cmd에서 실행하면 2 개의 값을 출력합니다 –

+0

출력이 터미널로 보내지는 경우 명령이 출력 될 수 있습니다. . 너 뭐하려고? – intuited

0

: 더 출력이없는 경우, 가정 실패했다. 내 아파치 로그가 더러워 질 것입니다.