// +---------------------------------------------------------------------- declare (strict_types = 1); namespace think\console\command; use think\console\Command; use think\console\Input; use think\console\input\Option; use think\console\Output; class RunServer extends Command { public function configure() { $this->setName('run') ->addOption( 'host', 'H', Option::VALUE_OPTIONAL, 'The host to server the application on', '0.0.0.0' ) ->addOption( 'port', 'p', Option::VALUE_OPTIONAL, 'The port to server the application on', 8000 ) ->addOption( 'root', 'r', Option::VALUE_OPTIONAL, 'The document root of the application', '' ) ->setDescription('PHP Built-in Server for ThinkPHP'); } public function execute(Input $input, Output $output) { $host = $input->getOption('host'); $port = $input->getOption('port'); $root = $input->getOption('root'); if (empty($root)) { $root = $this->app->getRootPath() . 'public'; } $command = sprintf( '"%s" -S %s:%d -t %s %s', PHP_BINARY, $host, $port, escapeshellarg($root), escapeshellarg($root . DIRECTORY_SEPARATOR . 'router.php') ); $output->writeln(sprintf('ThinkPHP Development server is started On ', $host, $port)); $output->writeln(sprintf('You can exit with `CTRL-C`')); $output->writeln(sprintf('Document root is: %s', $root)); passthru($command); } }