2 => array("pipe", "w"),␊ |
);␊ |
␊ |
$this->proc = proc_open($cmd, $descriptors, $this->pipes);␊ |
$env = array("LANG" => "en_US.UTF-8");␊ |
␊ |
$this->proc = proc_open($cmd, $descriptors, $this->pipes,␊ |
null, $env);␊ |
␊ |
if (!is_resource($this->proc))␊ |
{␊ |
|
$version = fgets($this->pipes[1]);␊ |
if ($version === false)␊ |
{␊ |
$err = fgets($this->pipes[2]);␊ |
throw new IDF_Scm_Exception(␊ |
"Could not determine stdio version: $err"␊ |
"Could not determine stdio version, stderr is:\n".␊ |
$this->_readStderr()␊ |
);␊ |
}␊ |
␊ |
|
}␊ |
␊ |
/**␊ |
* Reads all output from stderr and returns it␊ |
*␊ |
* @return string␊ |
*/␊ |
private function _readStderr()␊ |
{␊ |
$err = "";␊ |
while (($line = fgets($this->pipes[2])) !== false)␊ |
{␊ |
$err .= $line;␊ |
}␊ |
return empty($err) ? "<empty>" : $err;␊ |
}␊ |
␊ |
/**␊ |
* Reads the last output from the stdio process, parses and returns it␊ |
*␊ |
* @return string␊ |
* @throws IDF_Scm_Exception␊ |
*/␊ |
private function _read()␊ |
private function _readStdout()␊ |
{␊ |
$this->oob = array('w' => array(),␊ |
'p' => array(),␊ |
|
$c = fgetc($this->pipes[1]);␊ |
if ($c === false)␊ |
{␊ |
$err = fgets($this->pipes[2]);␊ |
throw new IDF_Scm_Exception(␊ |
"Could not read stdio: $err"␊ |
);␊ |
"No data on stdin, stderr is:\n".␊ |
$this->_readStderr()␊ |
);␊ |
}␊ |
␊ |
if ($c == ':')␊ |
|
public function exec(array $args, array $options = array())␊ |
{␊ |
$this->_write($args, $options);␊ |
return $this->_read();␊ |
return $this->_readStdout();␊ |
}␊ |
␊ |
/**␊ |