2012-04-13 2 views
11

터미널에서 실행할 때 색상이 지정된 결과를 출력하는 'git diff'와 같은 명령이 있습니다.PHP 스크립트에서 색상화된 명령을 실행하십시오.

이제 CLI PHP 스크립트에서이 명령을 호출하고 콘솔에 색칠 된 결과를 표시하고 싶습니다. 나는 exec(), system(), passthru()를 시도했지만 모든 경우 출력은 흑백 텍스트로 변환되었습니다.

표준 결과의 색상을 유지하는 방법이 있습니까? 그렇지 않은 경우 누군가이 정보가 손실되는 이유를 알고 있습니까?

+0

그냥 아이디어입니다. 아마 환경 변수와 관련이 있습니다. 빠른 테스트는 단서를 제공 할 수 있습니다 : env> env_a.out && php -r 'system ("env"); > env_b.out && diff env_a.out env_b.out' – gamen

+0

env 파일이 재정리 된 후 테스트를 해보십시오. diff는 다음과 같이 만됩니다. 'SHLVL = 1 to SHLVL = 2' – jeanmonod

+1

비슷한가? 솔직히 말해서 놀랍습니다. 아마도 여러분의 환경에 대한 더 자세한 정보를 제공하는 것이 여러분의 질문에 도움이 될 것입니다. 또한 색상을 먼저 출력하려고 시도하여 문제를 단순화 할 수 있습니다 ('php -r 'printf ("% c [32mGreen % c [0m \ n", 27 , 27);''). git과 같은 명령을 호출하는 것이 아닙니다. – gamen

답변

6

. 일반적으로 강제하는 방법이 있지만 명령 자체에만 적용됩니다. git diff의 경우 --color=always을 지정할 수 있습니다.

+1

네, 맞습니다. 그런 식으로하면 : ' ' 나는 색을 얻었다. 이제 질문은 : PHP에서 명령을 말할 수있는 방법이 있습니까? 예, 우리는 터미널에 있습니까? – jeanmonod

+3

불행하게도, 명령은 실제로 (쉘이하는 것과는 달리) PHP가 실행하는 방식으로 터미널에 연결되지 않습니다. 'passthru '를 사용하는 경우에도 PHP는 명령과 터미널 사이에 위치합니다. 통과 할 때 출력을 수정하지 않습니다. 그것은 단지 색이 아닙니다. 이런 식으로 실행하면 전체 화면 명령이 전혀 작동하지 않습니다. PHP에서 어쨌든 할 수 있다고 생각하지 않는 정교한 가상 터미널 설정이 부족하기 때문에 일반적인 해결책이 있다고 생각하지 않습니다. –

+0

그래, 고마워. – jeanmonod

-1

확인이 클래스 : 실행중인 명령이 그렇지 않은 경우를 컬러화 출력 단자에 있는지 확인되지 않고 모든 가능성에 https://gist.github.com/2390007

public static function color($text, $foreground, $background = null) 
    { 
     if (static::is_windows()) 
     { 
      return $text; 
     } 

     if (! array_key_exists($foreground, static::$foreground_colors)) 
     { 
      throw new \FuelException('Invalid CLI foreground color: '.$foreground); 
     } 

     if ($background !== null and ! array_key_exists($background, static::$background_colors)) 
     { 
      throw new \FuelException('Invalid CLI background color: '.$background); 
     } 

     $string = "\033[".static::$foreground_colors[$foreground]."m"; 

     if ($background !== null) 
     { 
      $string .= "\033[".static::$background_colors[$background]."m"; 
     } 

     $string .= $text."\033[0m"; 

     return $string; 
    } 
+0

이것은 질문에 대답하지 않는 것 같습니다. OP는'shell_exec()','exec()'등의 색상 화 된 출력을 얻는 방법을 묻는 것이 었습니다. PHP 스크립트에서 색상 화 된 출력을 터미널로 출력하는 방법을 묻지 않았습니다. –

관련 문제