param('host')) {
$this->_host = $this->param('host');
}
if ($this->param('port')) {
$this->_port = $this->param('port');
}
if ($this->param('document_root')) {
$this->_documentRoot = $this->param('document_root');
}
if ($this->param('ini_path')) {
$this->_iniPath = $this->param('ini_path');
}
// For Windows
if (substr($this->_documentRoot, -1, 1) === DIRECTORY_SEPARATOR) {
$this->_documentRoot = substr($this->_documentRoot, 0, strlen($this->_documentRoot) - 1);
}
if (preg_match("/^([a-z]:)[\\\]+(.+)$/i", $this->_documentRoot, $m)) {
$this->_documentRoot = $m[1] . '\\' . $m[2];
}
$this->_iniPath = rtrim($this->_iniPath, DIRECTORY_SEPARATOR);
if (preg_match("/^([a-z]:)[\\\]+(.+)$/i", $this->_iniPath, $m)) {
$this->_iniPath = $m[1] . '\\' . $m[2];
}
parent::startup();
}
/**
* Displays a header for the shell
*
* @return void
*/
protected function _welcome()
{
$this->out();
$this->out(sprintf('Welcome to CakePHP %s Console', 'v' . Configure::version()));
$this->hr();
$this->out(sprintf('App : %s', APP_DIR));
$this->out(sprintf('Path: %s', APP));
$this->out(sprintf('DocumentRoot: %s', $this->_documentRoot));
$this->out(sprintf('Ini Path: %s', $this->_iniPath));
$this->hr();
}
/**
* Override main() to handle action
*
* @return void
*/
public function main()
{
$command = sprintf(
'php -S %s:%d -t %s',
$this->_host,
$this->_port,
escapeshellarg($this->_documentRoot)
);
if (!empty($this->_iniPath)) {
$command = sprintf('%s -c %s', $command, $this->_iniPath);
}
$command = sprintf('%s %s', $command, escapeshellarg($this->_documentRoot . '/index.php'));
$port = ':' . $this->_port;
$this->out(sprintf('built-in server is running in http://%s%s/', $this->_host, $port));
$this->out(sprintf('You can exit with `CTRL-C`'));
system($command);
}
/**
* Gets the option parser instance and configures it.
*
* @return \Cake\Console\ConsoleOptionParser
*/
public function getOptionParser()
{
$parser = parent::getOptionParser();
$parser->setDescription([
'PHP Built-in Server for CakePHP',
'[WARN] Don\'t use this in a production environment',
])->addOption('host', [
'short' => 'H',
'help' => 'ServerHost'
])->addOption('port', [
'short' => 'p',
'help' => 'ListenPort'
])->addOption('ini_path', [
'short' => 'I',
'help' => 'php.ini path'
])->addOption('document_root', [
'short' => 'd',
'help' => 'DocumentRoot'
]);
return $parser;
}
}