|
|
<?php |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace think\process; |
|
|
|
|
|
use think\Process; |
|
|
|
|
|
class Builder |
|
|
{ |
|
|
private $arguments; |
|
|
private $cwd; |
|
|
private $env = null; |
|
|
private $input; |
|
|
private $timeout = 60; |
|
|
private $options = []; |
|
|
private $inheritEnv = true; |
|
|
private $prefix = []; |
|
|
private $outputDisabled = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function __construct(array $arguments = []) |
|
|
{ |
|
|
$this->arguments = $arguments; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static function create(array $arguments = []) |
|
|
{ |
|
|
return new static($arguments); |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function add($argument) |
|
|
{ |
|
|
$this->arguments[] = $argument; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setPrefix($prefix) |
|
|
{ |
|
|
$this->prefix = is_array($prefix) ? $prefix : [$prefix]; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setArguments(array $arguments) |
|
|
{ |
|
|
$this->arguments = $arguments; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setWorkingDirectory($cwd) |
|
|
{ |
|
|
$this->cwd = $cwd; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function inheritEnvironmentVariables($inheritEnv = true) |
|
|
{ |
|
|
$this->inheritEnv = $inheritEnv; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setEnv($name, $value) |
|
|
{ |
|
|
$this->env[$name] = $value; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function addEnvironmentVariables(array $variables) |
|
|
{ |
|
|
$this->env = array_replace($this->env, $variables); |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setInput($input) |
|
|
{ |
|
|
$this->input = Utils::validateInput(sprintf('%s::%s', __CLASS__, __FUNCTION__), $input); |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setTimeout($timeout) |
|
|
{ |
|
|
if (null === $timeout) { |
|
|
$this->timeout = null; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
$timeout = (float) $timeout; |
|
|
|
|
|
if ($timeout < 0) { |
|
|
throw new \InvalidArgumentException('The timeout value must be a valid positive integer or float number.'); |
|
|
} |
|
|
|
|
|
$this->timeout = $timeout; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function setOption($name, $value) |
|
|
{ |
|
|
$this->options[$name] = $value; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function disableOutput() |
|
|
{ |
|
|
$this->outputDisabled = true; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function enableOutput() |
|
|
{ |
|
|
$this->outputDisabled = false; |
|
|
|
|
|
return $this; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getProcess() |
|
|
{ |
|
|
if (0 === count($this->prefix) && 0 === count($this->arguments)) { |
|
|
throw new \LogicException('You must add() command arguments before calling getProcess().'); |
|
|
} |
|
|
|
|
|
$options = $this->options; |
|
|
|
|
|
$arguments = array_merge($this->prefix, $this->arguments); |
|
|
$script = implode(' ', array_map([__NAMESPACE__ . '\\Utils', 'escapeArgument'], $arguments)); |
|
|
|
|
|
if ($this->inheritEnv) { |
|
|
|
|
|
$env = array_replace($_ENV, $_SERVER, $this->env); |
|
|
} else { |
|
|
$env = $this->env; |
|
|
} |
|
|
|
|
|
$process = new Process($script, $this->cwd, $env, $this->input, $this->timeout, $options); |
|
|
|
|
|
if ($this->outputDisabled) { |
|
|
$process->disableOutput(); |
|
|
} |
|
|
|
|
|
return $process; |
|
|
} |
|
|
} |
|
|
|