[Process] Do not redirect output to file handles when output is disabled

This commit is contained in:
Romain Neutron 2014-06-14 14:54:26 +02:00
parent 88a954cf9f
commit b35250fd3b
2 changed files with 9 additions and 8 deletions

View File

@ -1238,8 +1238,8 @@ class Process
*/
private function getDescriptors()
{
$this->processPipes = new ProcessPipes($this->useFileHandles, $this->tty, $this->pty);
$descriptors = $this->processPipes->getDescriptors($this->outputDisabled);
$this->processPipes = new ProcessPipes($this->useFileHandles, $this->tty, $this->pty, $this->outputDisabled);
$descriptors = $this->processPipes->getDescriptors();
if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
// last exit code is output on the fourth pipe and caught to work around --enable-sigchild

View File

@ -32,20 +32,23 @@ class ProcessPipes
private $ttyMode;
/** @var bool */
private $ptyMode;
/** @var bool */
private $disableOutput;
const CHUNK_SIZE = 16384;
public function __construct($useFiles, $ttyMode, $ptyMode = false)
public function __construct($useFiles, $ttyMode, $ptyMode = false, $disableOutput = false)
{
$this->useFiles = (bool) $useFiles;
$this->ttyMode = (bool) $ttyMode;
$this->ptyMode = (bool) $ptyMode;
$this->disableOutput = (bool) $disableOutput;
// Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
// Workaround for this problem is to use temporary files instead of pipes on Windows platform.
//
// @see https://bugs.php.net/bug.php?id=51800
if ($this->useFiles) {
if ($this->useFiles && !$this->disableOutput) {
$this->files = array(
Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'),
Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'),
@ -107,13 +110,11 @@ class ProcessPipes
/**
* Returns an array of descriptors for the use of proc_open.
*
* @param bool $disableOutput Whether to redirect STDOUT and STDERR to /dev/null or not.
*
* @return array
*/
public function getDescriptors($disableOutput)
public function getDescriptors()
{
if ($disableOutput) {
if ($this->disableOutput) {
$nullstream = fopen(defined('PHP_WINDOWS_VERSION_BUILD') ? 'NUL' : '/dev/null', 'c');
return array(