_host = self::DEFAULT_HOST; $this->_port = self::DEFAULT_PORT; $this->_documentRoot = WWW_ROOT; } /** * Starts up the Shell and displays the welcome message. * Allows for checking and configuring prior to command or main execution * * Override this method if you want to remove the welcome information, * or otherwise modify the pre-command flow. * * @return void * @link http://book.cakephp.org/2.0/en/console-and-shells.html#Shell::startup */ public function startup() { if (!empty($this->params['host'])) { $this->_host = $this->params['host']; } if (!empty($this->params['port'])) { $this->_port = $this->params['port']; } if (!empty($this->params['document_root'])) { $this->_documentRoot = $this->params['document_root']; } // 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]; } parent::startup(); } /** * Displays a header for the shell * * @return void */ protected function _welcome() { $this->out(); $this->out(__d('cake_console', 'Welcome to CakePHP %s Console', 'v' . Configure::version())); $this->hr(); $this->out(__d('cake_console', 'App : %s', APP_DIR)); $this->out(__d('cake_console', 'Path: %s', APP)); $this->out(__d('cake_console', 'DocumentRoot: %s', $this->_documentRoot)); $this->hr(); } /** * Override main() to handle action * * @return void */ public function main() { if (version_compare(PHP_VERSION, '5.4.0') < 0) { $this->out(__d('cake_console', 'This command is available on %s or above', 'PHP5.4')); return; } $command = sprintf("php -S %s:%d -t %s %s", $this->_host, $this->_port, escapeshellarg($this->_documentRoot), escapeshellarg($this->_documentRoot . '/index.php') ); $port = ($this->_port == self::DEFAULT_PORT) ? '' : ':' . $this->_port; $this->out(__d('cake_console', 'built-in server is running in http://%s%s/', $this->_host, $port)); system($command); } /** * Get and configure the optionparser. * * @return ConsoleOptionParser */ public function getOptionParser() { $parser = parent::getOptionParser(); $parser->addOption('host', array( 'short' => 'H', 'help' => __d('cake_console', 'ServerHost') )); $parser->addOption('port', array( 'short' => 'p', 'help' => __d('cake_console', 'ListenPort') )); $parser->addOption('document_root', array( 'short' => 'd', 'help' => __d('cake_console', 'DocumentRoot') )); $parser->description(array( __d('cake_console', 'PHP Built-in Server for CakePHP'), __d('cake_console', '[WARN] Don\'t use this at the production environment'), )); return $parser; } }