*/
public function __construct($commandline, $cwd = null, array $env = null, $input = null, $timeout = 60, array $options = null)
{
- if (!function_exists('proc_open')) {
+ if (!\function_exists('proc_open')) {
throw new RuntimeException('The Process class relies on proc_open, which is not available on your PHP installation.');
}
// on Gnu/Linux, PHP builds with --enable-maintainer-zts are also affected
// @see : https://bugs.php.net/bug.php?id=51800
// @see : https://bugs.php.net/bug.php?id=50524
- if (null === $this->cwd && (defined('ZEND_THREAD_SAFE') || '\\' === DIRECTORY_SEPARATOR)) {
+ if (null === $this->cwd && (\defined('ZEND_THREAD_SAFE') || '\\' === \DIRECTORY_SEPARATOR)) {
$this->cwd = getcwd();
}
if (null !== $env) {
$this->setInput($input);
$this->setTimeout($timeout);
- $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR;
+ $this->useFileHandles = '\\' === \DIRECTORY_SEPARATOR;
$this->pty = false;
- $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
+ $this->enhanceSigchildCompatibility = '\\' !== \DIRECTORY_SEPARATOR && $this->isSigchildEnabled();
if (null !== $options) {
@trigger_error(sprintf('The $options parameter of the %s constructor is deprecated since Symfony 3.3 and will be removed in 4.0.', __CLASS__), E_USER_DEPRECATED);
$this->options = array_replace($this->options, $options);
*/
public function run($callback = null/*, array $env = array()*/)
{
- $env = 1 < func_num_args() ? func_get_arg(1) : null;
+ $env = 1 < \func_num_args() ? func_get_arg(1) : null;
$this->start($callback, $env);
return $this->wait();
if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.');
}
- $env = 1 < func_num_args() ? func_get_arg(1) : null;
+ $env = 1 < \func_num_args() ? func_get_arg(1) : null;
if (0 !== $this->run($callback, $env)) {
throw new ProcessFailedException($this);
if ($this->isRunning()) {
throw new RuntimeException('Process is already running');
}
- if (2 <= func_num_args()) {
+ if (2 <= \func_num_args()) {
$env = func_get_arg(1);
} else {
if (__CLASS__ !== static::class) {
$r = new \ReflectionMethod($this, __FUNCTION__);
- if (__CLASS__ !== $r->getDeclaringClass()->getName() && (2 > $r->getNumberOfParameters() || 'env' !== $r->getParameters()[0]->name)) {
+ if (__CLASS__ !== $r->getDeclaringClass()->getName() && (2 > $r->getNumberOfParameters() || 'env' !== $r->getParameters()[1]->name)) {
@trigger_error(sprintf('The %s::start() method expects a second "$env" argument since Symfony 3.3. It will be made mandatory in 4.0.', static::class), E_USER_DEPRECATED);
}
}
$descriptors = $this->getDescriptors();
$inheritEnv = $this->inheritEnv;
- if (is_array($commandline = $this->commandline)) {
+ if (\is_array($commandline = $this->commandline)) {
$commandline = implode(' ', array_map(array($this, 'escapeArgument'), $commandline));
- if ('\\' !== DIRECTORY_SEPARATOR) {
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
// exec is mandatory to deal with sending a signal to the process
$commandline = 'exec '.$commandline;
}
} else {
$env = $this->getDefaultEnv();
}
- if ('\\' === DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) {
+ if ('\\' === \DIRECTORY_SEPARATOR && $this->enhanceWindowsCompatibility) {
$this->options['bypass_shell'] = true;
$commandline = $this->prepareWindowsCommandLine($commandline, $env);
} elseif (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
// @see : https://bugs.php.net/69442
$ptsWorkaround = fopen(__FILE__, 'r');
}
- if (defined('HHVM_VERSION')) {
+ if (\defined('HHVM_VERSION')) {
$envPairs = $env;
} else {
$envPairs = array();
$this->process = proc_open($commandline, $descriptors, $this->processPipes->pipes, $this->cwd, $envPairs, $this->options);
- if (!is_resource($this->process)) {
+ if (!\is_resource($this->process)) {
throw new RuntimeException('Unable to launch a new process.');
}
$this->status = self::STATUS_STARTED;
if ($this->isRunning()) {
throw new RuntimeException('Process is already running');
}
- $env = 1 < func_num_args() ? func_get_arg(1) : null;
+ $env = 1 < \func_num_args() ? func_get_arg(1) : null;
$process = clone $this;
$process->start($callback, $env);
do {
$this->checkTimeout();
- $running = '\\' === DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
- $this->readPipes($running, '\\' !== DIRECTORY_SEPARATOR || !$running);
+ $running = '\\' === \DIRECTORY_SEPARATOR ? $this->isRunning() : $this->processPipes->areOpen();
+ $this->readPipes($running, '\\' !== \DIRECTORY_SEPARATOR || !$running);
} while ($running);
while ($this->isRunning()) {
/**
* Returns the exit code returned by the process.
*
- * @return null|int The exit status code, null if the Process is not terminated
+ * @return int|null The exit status code, null if the Process is not terminated
*
* @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled
*/
* This method relies on the Unix exit code status standardization
* and might not be relevant for other operating systems.
*
- * @return null|string A string representation for the exit status code, null if the Process is not terminated
+ * @return string|null A string representation for the exit status code, null if the Process is not terminated
*
* @see http://tldp.org/LDP/abs/html/exitcodes.html
* @see http://en.wikipedia.org/wiki/Unix_signal
*/
public function getCommandLine()
{
- return is_array($this->commandline) ? implode(' ', array_map(array($this, 'escapeArgument'), $this->commandline)) : $this->commandline;
+ return \is_array($this->commandline) ? implode(' ', array_map(array($this, 'escapeArgument'), $this->commandline)) : $this->commandline;
}
/**
*/
public function setTty($tty)
{
- if ('\\' === DIRECTORY_SEPARATOR && $tty) {
+ if ('\\' === \DIRECTORY_SEPARATOR && $tty) {
throw new RuntimeException('TTY mode is not supported on Windows platform.');
}
if ($tty) {
{
// Process can not handle env values that are arrays
$env = array_filter($env, function ($value) {
- return !is_array($value);
+ return !\is_array($value);
});
$this->env = $env;
return $result;
}
- if ('\\' === DIRECTORY_SEPARATOR) {
+ if ('\\' === \DIRECTORY_SEPARATOR) {
return $result = false;
}
if ($this->input instanceof \Iterator) {
$this->input->rewind();
}
- if ('\\' === DIRECTORY_SEPARATOR) {
+ if ('\\' === \DIRECTORY_SEPARATOR) {
$this->processPipes = new WindowsPipes($this->input, !$this->outputDisabled || $this->hasCallback);
} else {
$this->processPipes = new UnixPipes($this->isTty(), $this->isPty(), $this->input, !$this->outputDisabled || $this->hasCallback);
if ($this->outputDisabled) {
return function ($type, $data) use ($callback) {
if (null !== $callback) {
- call_user_func($callback, $type, $data);
+ \call_user_func($callback, $type, $data);
}
};
}
}
if (null !== $callback) {
- call_user_func($callback, $type, $data);
+ \call_user_func($callback, $type, $data);
}
};
}
$this->processInformation = proc_get_status($this->process);
$running = $this->processInformation['running'];
- $this->readPipes($running && $blocking, '\\' !== DIRECTORY_SEPARATOR || !$running);
+ $this->readPipes($running && $blocking, '\\' !== \DIRECTORY_SEPARATOR || !$running);
if ($this->fallbackStatus && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
$this->processInformation = $this->fallbackStatus + $this->processInformation;
return self::$sigchild;
}
- if (!function_exists('phpinfo') || defined('HHVM_VERSION')) {
+ if (!\function_exists('phpinfo') || \defined('HHVM_VERSION')) {
return self::$sigchild = false;
}
private function close()
{
$this->processPipes->close();
- if (is_resource($this->process)) {
+ if (\is_resource($this->process)) {
proc_close($this->process);
}
$this->exitcode = $this->processInformation['exitcode'];
$this->exitcode = null;
$this->fallbackStatus = array();
$this->processInformation = null;
- $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'wb+');
- $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'wb+');
+ $this->stdout = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
+ $this->stderr = fopen('php://temp/maxmemory:'.(1024 * 1024), 'w+b');
$this->process = null;
$this->latestSignal = null;
$this->status = self::STATUS_READY;
return false;
}
- if ('\\' === DIRECTORY_SEPARATOR) {
+ if ('\\' === \DIRECTORY_SEPARATOR) {
exec(sprintf('taskkill /F /T /PID %d 2>&1', $pid), $output, $exitCode);
if ($exitCode && $this->isRunning()) {
if ($throwException) {
} else {
if (!$this->enhanceSigchildCompatibility || !$this->isSigchildEnabled()) {
$ok = @proc_terminate($this->process, $signal);
- } elseif (function_exists('posix_kill')) {
+ } elseif (\function_exists('posix_kill')) {
$ok = @posix_kill($pid, $signal);
} elseif ($ok = proc_open(sprintf('kill -%d %d', $signal, $pid), array(2 => array('pipe', 'w')), $pipes)) {
$ok = false === fgets($pipes[2]);
*/
private function escapeArgument($argument)
{
- if ('\\' !== DIRECTORY_SEPARATOR) {
+ if ('\\' !== \DIRECTORY_SEPARATOR) {
return "'".str_replace("'", "'\\''", $argument)."'";
}
if ('' === $argument = (string) $argument) {
$env = array();
foreach ($_SERVER as $k => $v) {
- if (is_string($v) && false !== $v = getenv($k)) {
+ if (\is_string($v) && false !== $v = getenv($k)) {
$env[$k] = $v;
}
}
foreach ($_ENV as $k => $v) {
- if (is_string($v)) {
+ if (\is_string($v)) {
$env[$k] = $v;
}
}