You are here

ConsoleOutput.php in Zircon Profile 8

Same filename and directory in other branches
  1. 8.0 vendor/symfony/console/Output/ConsoleOutput.php

File

vendor/symfony/console/Output/ConsoleOutput.php
View source
<?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 {

  /**
   * @var StreamOutput
   */
  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) {
    parent::__construct($this
      ->openOutputStream(), $verbosity, $decorated, $formatter);
    $actualDecorated = $this
      ->isDecorated();
    $this->stderr = new StreamOutput($this
      ->openErrorStream(), $verbosity, $decorated, $this
      ->getFormatter());
    if (null === $decorated) {
      $this
        ->setDecorated($actualDecorated && $this->stderr
        ->isDecorated());
    }
  }

  /**
   * {@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() {
    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() {
    $checks = array(
      function_exists('php_uname') ? php_uname('s') : '',
      getenv('OSTYPE'),
      PHP_OS,
    );
    return false !== stristr(implode(';', $checks), 'OS400');
  }

  /**
   * @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');
  }

}

Classes

Namesort descending Description
ConsoleOutput ConsoleOutput is the default class for all CLI output. It uses STDOUT.