From 5b92b9ed432ea1d5f2c596517fc7f8aa825b1977 Mon Sep 17 00:00:00 2001 From: John Kary Date: Sun, 29 Apr 2012 10:20:44 -0500 Subject: [PATCH] [Console] Selectively output to STDOUT or OUTPUT stream Addresses issues with writing console output for IBM i5 Series (OS400). The normal QP2TERM shell outputs garbage text when attempting to write directly to STDOUT, likely because of EBCDIC character-encoding used on IBM platforms. Writing to the OUTPUT mimics using 'echo' or 'print' and prints properly in the console. Fixes #1434 --- .../Console/Output/ConsoleOutput.php | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Console/Output/ConsoleOutput.php b/src/Symfony/Component/Console/Output/ConsoleOutput.php index 38abab79644a3..919382b54cada 100644 --- a/src/Symfony/Component/Console/Output/ConsoleOutput.php +++ b/src/Symfony/Component/Console/Output/ConsoleOutput.php @@ -42,6 +42,26 @@ class ConsoleOutput extends StreamOutput */ public function __construct($verbosity = self::VERBOSITY_NORMAL, $decorated = null, OutputFormatterInterface $formatter = null) { - parent::__construct(fopen('php://stdout', 'w'), $verbosity, $decorated, $formatter); + $outputStream = 'php://stdout'; + if (!$this->hasStdoutSupport()) { + $outputStream = 'php://output'; + } + + parent::__construct(fopen($outputStream, 'w'), $verbosity, $decorated, $formatter); + } + + /** + * Returns true if current environment supports writing console output to + * 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 boolean + */ + protected function hasStdoutSupport() + { + return ('OS400' != php_uname('s')); } }