国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

源碼解讀:php artisan serve

Loong_T / 3569人閱讀

摘要:原文來自在學(xué)習(xí)的時候,可能很多人接觸的第一個的命令就是,這樣我們就可以跑起第一個的應(yīng)用。本文來嘗試解讀一下這個命令行的源碼。

原文來自:https://www.codecasts.com/blo...

在學(xué)習(xí) Laravel 的時候,可能很多人接觸的第一個 artisan 的命令就是:php artisan serve,這樣我們就可以跑起第一個 Laravel 的應(yīng)用。本文來嘗試解讀一下這個命令行的源碼。

代碼在哪

跟之前的源碼解讀文章一樣,我推薦大家可以使用編輯器的搜索功能,直接搜ServeCommand 就可以直接打開這個命令的源碼文件,位于 IlluminateFoundationConsoleServeCommand,像其他的 artisan 命令一樣,我們還是關(guān)注 fire() 方法:

 public function fire(){
        chdir($this->laravel->publicPath());

        $this->line("Laravel development server started: host()}:{$this->port()}>");

        passthru($this->serverCommand());
}
第一步

首先使用 chdir() 將目錄改變至 public/ 目錄,這是根據(jù) $this->laravel->publicPath() 代碼的 publicPath() 來的,這個方法的源碼位于 IlluminateFoundationApplication 中:

public function publicPath()
    {
        return $this->basePath.DIRECTORY_SEPARATOR."public";
    }

上面的 $this->basePath 就是項(xiàng)目的根目錄啦!

第二步

打印信息,這是通過 fire() 的第二行代碼實(shí)現(xiàn)的:

$this->line("Laravel development server started: host()}:{$this->port()}>");

具體效果就是這樣:

第三步

執(zhí)行命令,這個命令是從 passthru($this->serverCommand()) 的原生函數(shù) passthru() 來實(shí)現(xiàn)的,其中 $this->serverCommand() 負(fù)責(zé)返回一個可以執(zhí)行的字符串命令,具體代碼就在同文件的 serverCommand() 中:

 protected function serverCommand()
    {
        return sprintf("%s -S %s:%s %s/server.php",
            ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false)),
            $this->host(),
            $this->port(),
            ProcessUtils::escapeArgument($this->laravel->basePath())
        );
    }

sprintf() 的四個字符串占位符會被后面?zhèn)魅氲乃膫€參數(shù)替換,最終打印出一個可以執(zhí)行的 PHP 命令,其中這四個分別對應(yīng)的是:

1.下面代碼返回 php 的可執(zhí)行全路徑,

ProcessUtils::escapeArgument((new PhpExecutableFinder)->find(false))

2.下面代碼返回 host ,默認(rèn)為 127.0.0.1

$this->host()

這部分可以直接查看 host() 方法:

 protected function host()
    {
        return $this->input->getOption("host");
    }

這樣看來,我們在使用 serve 命令的時候其實(shí)是可以傳入 host 參數(shù)的。

3.下面代碼返回 port ,跟 host 是一模一樣的:

$this->port()

代碼就在 port() 方法中,(使用 serve 命令的時候也是可以直接傳入端口號的!)

 protected function port()
    {
        return $this->input->getOption("port");
    }

上面的 2 和 3 可以直接這樣考證 : 執(zhí)行php artisan help serve

4.下面的代碼返回執(zhí)行代碼的全路徑:

ProcessUtils::escapeArgument($this->laravel->basePath())

所以,最后 serverCommand() 返回的是什么呢?我們可以直接打印看看:

這樣一看,php artisan serve 命令就是直接使用 php 執(zhí)行 server.php 文件,這個文件就在項(xiàng)目的根目錄下,比如就是相當(dāng)于我們直接在命令行執(zhí)行下面這個命令:

php -S 127.0.0.1:8000 server.php

在這基礎(chǔ)上,記得指定 public/ 為網(wǎng)站根目錄。

最后

php artisan serve 命令背后其實(shí)也就是使用了 php 去直接執(zhí)行文件,跟我們在使用 php -S php -S 127.0.0.1:8000 PHP的內(nèi)置服務(wù)器沒有太大的區(qū)別。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/23143.html

相關(guān)文章

  • Laravel php artisan optimize 源碼解讀

    摘要:確定的代碼位于的中這樣一看,其實(shí)就是將文件刪除,而這個是會自動生成的一個數(shù)組文件,這里指定了每個和的位置和命名空間的全路徑等,在啟動項(xiàng)目的時候,可以直接讀取使用。所以這個命令可以拆為兩步層面優(yōu)化加載速度刪除很清晰。 原文:https://www.codecasts.com/blo... 在部署 Laravel 項(xiàng)目的時候,我們經(jīng)常會使用到一個提升性能的命令: php artisan o...

    brianway 評論0 收藏0
  • 源碼解讀:Laravel php artisan route:cache

    摘要:然而,本文的討論重點(diǎn),還是背后的源碼,是怎么做到這一步的。從哪開始看源碼位于你還是可以使用編輯器搜,就可以看到源碼了。第三步序列化所有路由注冊映射關(guān)系,還是在的方法中上面的方法位于中的中。所以到這里,的源碼解讀就完成了。 學(xué) Laravel 和 Vuejs 你真應(yīng)該來 codecasts.com ! Laravel ?route:cache 可以直接緩存路由文件,這樣其實(shí)可以在一定程度...

    wangzy2019 評論0 收藏0
  • Laravel 源碼解讀php artisan make:auth

    摘要:添加路由在方法中,通過下面幾行代碼添加路由注意這個參數(shù),就是將這個文件的內(nèi)容附加在原來路由文件的后面,并不會將原來的路由清零。 學(xué) Laravel 和 Vuejs,你真應(yīng)該來 codecasts.com ,有免費(fèi)高質(zhì)量視頻! 在 Laravel 5.2 的時候,官方給我們提供了 make:auth 命令,這個命令使得我們在執(zhí)行一條命令的情況下實(shí)現(xiàn)用戶注冊和登錄,忘記密碼,找回密碼的過程...

    xorpay 評論0 收藏0
  • "php artisan serve"到底干了什么

    摘要:最近看了一下這個框架,寫點(diǎn)東西當(dāng)個筆記。函數(shù)會迭代屬性為的,逐一將其注冊,的方法繼承自父類,關(guān)鍵的就是在這個里注冊的。 最近看了一下 laravel 這個框架,寫點(diǎn)東西當(dāng)個筆記。跟著官網(wǎng)上的說明 install 好一個項(xiàng)目后,在項(xiàng)目根目錄執(zhí)行命令php artisan serve就可以開啟一個簡易的服務(wù)器進(jìn)行開發(fā),這個命令到底做了什么,看了一下代碼,在這里簡要描述一下自己的看法。 先說...

    TANKING 評論0 收藏0
  • Laravel核心解讀 -- 用戶認(rèn)證系統(tǒng)(基礎(chǔ)介紹)

    摘要:系統(tǒng)的核心是由的認(rèn)證組件的看守器和提供器組成。使用的認(rèn)證系統(tǒng),幾乎所有東西都已經(jīng)為你配置好了。其配置文件位于,其中包含了用于調(diào)整認(rèn)證服務(wù)行為的注釋清晰的選項(xiàng)配置。 用戶認(rèn)證系統(tǒng)(基礎(chǔ)介紹) 使用過Laravel的開發(fā)者都知道,Laravel自帶了一個認(rèn)證系統(tǒng)來提供基本的用戶注冊、登錄、認(rèn)證、找回密碼,如果Auth系統(tǒng)里提供的基礎(chǔ)功能不滿足需求還可以很方便的在這些基礎(chǔ)功能上進(jìn)行擴(kuò)展。這篇...

    RebeccaZhong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<