2011-03-23 2 views
2

이 내 코드입니다 :PHP : 간부 불확실성

실행 명령을 다음 결과

 $command = 'path to some script'; 
     echo "Running command:\n $command "; 
     $result = array(); 
     exec ($command, $result); 


일부
경로 [여기 명령 자체로 인쇄 된 몇 가지 경고를 이동] 스크립트

e 스크립트의 오류 출력은 어떤 식 으로든 앞에 나오는 echo 명령의 가운데 (!)에 삽입됩니다.

아이디어가 있으십니까?

답변

4

이것은 버퍼링 된 vs 비 버퍼링 io입니다. 오류 출력은 stderror가되고 다른 출력은 stdout이됩니다. Stdout은 일반적으로 버퍼링되기 때문에 스크립트를 실행하기 전에 플러시하도록 강요한다면 원하는 결과를 얻을 수 있습니다.

예에 따라, exec가 표준 오류 ( 열려진)를 포착하지 않기 때문이다이 http://php.net/manual/en/function.flush.php

+0

그러나 버퍼가없는 문자열이 중간에 * 어떻게 입력되는지 이해할 수 없습니다. – shealtiel

1

을 시도해보십시오

exec ('/bin/echo foo > /dev/stderr', $result); 

윌 출력 foo, 비록 exec은 아무것도 출력하지해야한다. 당신은 수행하여 그것을 강제 할 수는 중간에 나타납니다

exec ($command.' 2>&1', $result); 

이유는 아마도 때문에 출력 버퍼링이다 (@Danny 위에서 설명). 출력 버퍼는 명령이 끝나기 전에 소모되어 자동으로 플러시되고 새로운 버퍼가 시작됩니다. 따라서 중간에 오류가 나타납니다.

관련 문제