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

資訊專(zhuān)欄INFORMATION COLUMN

源碼解讀:php artisan serve

Loong_T / 3562人閱讀

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

原文來(lái)自:https://www.codecasts.com/blo...

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

代碼在哪

跟之前的源碼解讀文章一樣,我推薦大家可以使用編輯器的搜索功能,直接搜ServeCommand 就可以直接打開(kāi)這個(gè)命令的源碼文件,位于 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() 來(lái)的,這個(gè)方法的源碼位于 IlluminateFoundationApplication 中:

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

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

第二步

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

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

具體效果就是這樣:

第三步

執(zhí)行命令,這個(gè)命令是從 passthru($this->serverCommand()) 的原生函數(shù) passthru() 來(lái)實(shí)現(xiàn)的,其中 $this->serverCommand() 負(fù)責(zé)返回一個(gè)可以執(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() 的四個(gè)字符串占位符會(huì)被后面?zhèn)魅氲乃膫€(gè)參數(shù)替換,最終打印出一個(gè)可以執(zhí)行的 PHP 命令,其中這四個(gè)分別對(duì)應(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");
    }

這樣看來(lái),我們?cè)谑褂?serve 命令的時(shí)候其實(shí)是可以傳入 host 參數(shù)的。

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

$this->port()

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

 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 文件,這個(gè)文件就在項(xiàng)目的根目錄下,比如就是相當(dāng)于我們直接在命令行執(zhí)行下面這個(gè)命令:

php -S 127.0.0.1:8000 server.php

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

最后

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

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

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

相關(guān)文章

  • Laravel php artisan optimize 源碼解讀

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

    brianway 評(píng)論0 收藏0
  • 源碼解讀:Laravel php artisan route:cache

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

    wangzy2019 評(píng)論0 收藏0
  • Laravel 源碼解讀php artisan make:auth

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

    xorpay 評(píng)論0 收藏0
  • "php artisan serve"到底干了什么

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

    TANKING 評(píng)論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ǔ)介紹) 使用過(guò)Laravel的開(kāi)發(fā)者都知道,Laravel自帶了一個(gè)認(rèn)證系統(tǒng)來(lái)提供基本的用戶注冊(cè)、登錄、認(rèn)證、找回密碼,如果Auth系統(tǒng)里提供的基礎(chǔ)功能不滿足需求還可以很方便的在這些基礎(chǔ)功能上進(jìn)行擴(kuò)展。這篇...

    RebeccaZhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<