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; } }