[Console] Fix STDERR output text on IBM iSeries OS400
This commit is contained in:
parent
25a50f5b55
commit
23c42ca333
@ -30,6 +30,9 @@ use Symfony\Component\Console\Formatter\OutputFormatterInterface;
|
|||||||
*/
|
*/
|
||||||
class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var StreamOutput
|
||||||
|
*/
|
||||||
private $stderr;
|
private $stderr;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,14 +46,12 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
|||||||
*/
|
*/
|
||||||
public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null)
|
public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null)
|
||||||
{
|
{
|
||||||
$outputStream = 'php://stdout';
|
$outputStream = $this->hasStdoutSupport() ? 'php://stdout' : 'php://output';
|
||||||
if (!$this->hasStdoutSupport()) {
|
$errorStream = $this->hasStderrSupport() ? 'php://stderr' : 'php://output';
|
||||||
$outputStream = 'php://output';
|
|
||||||
}
|
|
||||||
|
|
||||||
parent::__construct(fopen($outputStream, 'w'), $verbosity, $decorated, $formatter);
|
parent::__construct(fopen($outputStream, 'w'), $verbosity, $decorated, $formatter);
|
||||||
|
|
||||||
$this->stderr = new StreamOutput(fopen('php://stderr', 'w'), $verbosity, $decorated, $this->getFormatter());
|
$this->stderr = new StreamOutput(fopen($errorStream, 'w'), $verbosity, $decorated, $this->getFormatter());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,14 +101,32 @@ class ConsoleOutput extends StreamOutput implements ConsoleOutputInterface
|
|||||||
* Returns true if current environment supports writing console output to
|
* Returns true if current environment supports writing console output to
|
||||||
* STDOUT.
|
* STDOUT.
|
||||||
*
|
*
|
||||||
* IBM iSeries (OS400) exhibits character-encoding issues when writing to
|
|
||||||
* STDOUT and doesn't properly convert ASCII to EBCDIC, resulting in garbage
|
|
||||||
* output.
|
|
||||||
*
|
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function hasStdoutSupport()
|
protected function hasStdoutSupport()
|
||||||
{
|
{
|
||||||
return ('OS400' != php_uname('s'));
|
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()
|
||||||
|
{
|
||||||
|
return 'OS400' === php_uname('s');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user