2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Output ;
use Symfony\Component\Console\Formatter\OutputFormatterInterface ;
/**
* ConsoleOutput is the default class for all CLI output . It uses STDOUT .
*
* This class is a convenient wrapper around `StreamOutput` .
*
* $output = new ConsoleOutput ();
*
* This is equivalent to :
*
* $output = new StreamOutput ( fopen ( 'php://stdout' , 'w' ));
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
{
2015-08-27 12:03:05 -07:00
/**
* @ var StreamOutput
*/
2015-08-17 17:00:26 -07:00
private $stderr ;
/**
* Constructor .
*
* @ param int $verbosity The verbosity level ( one of the VERBOSITY constants in OutputInterface )
* @ param bool | null $decorated Whether to decorate messages ( null for auto - guessing )
* @ param OutputFormatterInterface | null $formatter Output formatter instance ( null to use default OutputFormatter )
*/
public function __construct ( $verbosity = self :: VERBOSITY_NORMAL , $decorated = null , OutputFormatterInterface $formatter = null )
{
2015-09-04 13:20:09 -07:00
parent :: __construct ( $this -> openOutputStream (), $verbosity , $decorated , $formatter );
2015-08-17 17:00:26 -07:00
2015-10-08 11:40:12 -07:00
$actualDecorated = $this -> isDecorated ();
2015-09-04 13:20:09 -07:00
$this -> stderr = new StreamOutput ( $this -> openErrorStream (), $verbosity , $decorated , $this -> getFormatter ());
2015-10-08 11:40:12 -07:00
if ( null === $decorated ) {
$this -> setDecorated ( $actualDecorated && $this -> stderr -> isDecorated ());
}
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
public function setDecorated ( $decorated )
{
parent :: setDecorated ( $decorated );
$this -> stderr -> setDecorated ( $decorated );
}
/**
* { @ inheritdoc }
*/
public function setFormatter ( OutputFormatterInterface $formatter )
{
parent :: setFormatter ( $formatter );
$this -> stderr -> setFormatter ( $formatter );
}
/**
* { @ inheritdoc }
*/
public function setVerbosity ( $level )
{
parent :: setVerbosity ( $level );
$this -> stderr -> setVerbosity ( $level );
}
/**
* { @ inheritdoc }
*/
public function getErrorOutput ()
{
return $this -> stderr ;
}
/**
* { @ inheritdoc }
*/
public function setErrorOutput ( OutputInterface $error )
{
$this -> stderr = $error ;
}
/**
* Returns true if current environment supports writing console output to
* STDOUT .
*
* @ return bool
*/
protected function hasStdoutSupport ()
{
2015-08-27 12:03:05 -07:00
return false === $this -> isRunningOS400 ();
}
/**
* Returns true if current environment supports writing console output to
* STDERR .
*
* @ return bool
*/
protected function hasStderrSupport ()
{
return false === $this -> isRunningOS400 ();
}
/**
* Checks if current executing environment is IBM iSeries ( OS400 ), which
* doesn ' t properly convert character - encodings between ASCII to EBCDIC .
*
* @ return bool
*/
private function isRunningOS400 ()
{
2015-11-17 13:42:33 -08:00
$checks = array (
function_exists ( 'php_uname' ) ? php_uname ( 's' ) : '' ,
getenv ( 'OSTYPE' ),
PHP_OS ,
);
2016-04-20 09:56:34 -07:00
return false !== stripos ( implode ( ';' , $checks ), 'OS400' );
2015-08-17 17:00:26 -07:00
}
2015-09-04 13:20:09 -07:00
/**
* @ return resource
*/
private function openOutputStream ()
{
$outputStream = $this -> hasStdoutSupport () ? 'php://stdout' : 'php://output' ;
return @ fopen ( $outputStream , 'w' ) ? : fopen ( 'php://output' , 'w' );
}
/**
* @ return resource
*/
private function openErrorStream ()
{
$errorStream = $this -> hasStderrSupport () ? 'php://stderr' : 'php://output' ;
return fopen ( $errorStream , 'w' );
}
2015-08-17 17:00:26 -07:00
}