| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | 
							- <?php
 
- /**
 
-  * @link http://www.yiiframework.com/
 
-  * @copyright Copyright (c) 2008 Yii Software LLC
 
-  * @license http://www.yiiframework.com/license/
 
-  */
 
- namespace yii\console\controllers;
 
- use Yii;
 
- use yii\console\Controller;
 
- use yii\helpers\Console;
 
- /**
 
-  * Runs PHP built-in web server.
 
-  *
 
-  * In order to access server from remote machines use 0.0.0.0:8000. That is especially useful when running server in
 
-  * a virtual machine.
 
-  *
 
-  * @author Alexander Makarov <sam@rmcreative.ru>
 
-  * @since 2.0.7
 
-  */
 
- class ServeController extends Controller
 
- {
 
-     const EXIT_CODE_NO_DOCUMENT_ROOT = 2;
 
-     const EXIT_CODE_NO_ROUTING_FILE = 3;
 
-     const EXIT_CODE_ADDRESS_TAKEN_BY_ANOTHER_SERVER = 4;
 
-     const EXIT_CODE_ADDRESS_TAKEN_BY_ANOTHER_PROCESS = 5;
 
-     /**
 
-      * @var int port to serve on.
 
-      */
 
-     public $port = 8080;
 
-     /**
 
-      * @var string path or [path alias](guide:concept-aliases) to directory to serve
 
-      */
 
-     public $docroot = '@app/web';
 
-     /**
 
-      * @var string path to router script.
 
-      * See https://secure.php.net/manual/en/features.commandline.webserver.php
 
-      */
 
-     public $router;
 
-     /**
 
-      * Runs PHP built-in web server.
 
-      *
 
-      * @param string $address address to serve on. Either "host" or "host:port".
 
-      *
 
-      * @return int
 
-      */
 
-     public function actionIndex($address = 'localhost')
 
-     {
 
-         $documentRoot = Yii::getAlias($this->docroot);
 
-         if (strpos($address, ':') === false) {
 
-             $address = $address . ':' . $this->port;
 
-         }
 
-         if (!is_dir($documentRoot)) {
 
-             $this->stdout("Document root \"$documentRoot\" does not exist.\n", Console::FG_RED);
 
-             return self::EXIT_CODE_NO_DOCUMENT_ROOT;
 
-         }
 
-         if ($this->isAddressTaken($address)) {
 
-             $this->stdout("http://$address is taken by another process.\n", Console::FG_RED);
 
-             return self::EXIT_CODE_ADDRESS_TAKEN_BY_ANOTHER_PROCESS;
 
-         }
 
-         if ($this->router !== null && !file_exists($this->router)) {
 
-             $this->stdout("Routing file \"$this->router\" does not exist.\n", Console::FG_RED);
 
-             return self::EXIT_CODE_NO_ROUTING_FILE;
 
-         }
 
-         $this->stdout("Server started on http://{$address}/\n");
 
-         $this->stdout("Document root is \"{$documentRoot}\"\n");
 
-         if ($this->router) {
 
-             $this->stdout("Routing file is \"$this->router\"\n");
 
-         }
 
-         $this->stdout("Quit the server with CTRL-C or COMMAND-C.\n");
 
-         passthru('"' . PHP_BINARY . '"' . " -S {$address} -t \"{$documentRoot}\" $this->router");
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      */
 
-     public function options($actionID)
 
-     {
 
-         return array_merge(parent::options($actionID), [
 
-             'docroot',
 
-             'router',
 
-             'port',
 
-         ]);
 
-     }
 
-     /**
 
-      * {@inheritdoc}
 
-      * @since 2.0.8
 
-      */
 
-     public function optionAliases()
 
-     {
 
-         return array_merge(parent::optionAliases(), [
 
-             't' => 'docroot',
 
-             'p' => 'port',
 
-             'r' => 'router',
 
-         ]);
 
-     }
 
-     /**
 
-      * @param string $address server address
 
-      * @return bool if address is already in use
 
-      */
 
-     protected function isAddressTaken($address)
 
-     {
 
-         list($hostname, $port) = explode(':', $address);
 
-         $fp = @fsockopen($hostname, $port, $errno, $errstr, 3);
 
-         if ($fp === false) {
 
-             return false;
 
-         }
 
-         fclose($fp);
 
-         return true;
 
-     }
 
- }
 
 
  |