## 練習0:安裝和準備
>[info] 任務:安裝好ThinkPHP`5.1`,以及為后面的學習做一些準備。
安裝ThinkPHP`5.1`之前,首先確認下你的PHP環境是`PHP5.6+`,由于PHP`5.6` 和`7.0` 只在大概1年內提供安全補丁更新,因此如果條件允許推薦使用`PHP7.1+`版本。
有很多新手經常會問一個問題,`ThinkPHP5`是否支持`PHP7`?注意看 ThinkPHP5 的安裝環境寫的是`PHP5.6+` 而不是`PHP5.6`,顯然`PHP7`屬于`PHP5.6+`吧,除非你是在問是否支持`PHP8.0`,我可能會回答不支持,因為我不知道`PHP8.0`長啥樣,我怎么知道支不支持?言下之意,如果是當前框架版本發布的時候尚未發布的PHP版本,那么是否支持是不確定的。但目前可以肯定的是至少可以支持`PHP7.2`版本,無論是ThinkPHP`5.0`還是`5.1`。
安裝`ThinkPHP5`很簡單,前提是你首先已經安裝`Composer`或者`Git`(這兩個是PHP開發者必不可少的),推薦的方式是使用`Composer`安裝,在`PHP`生態中,[Composer](https://getcomposer.org/) 是最先進的依賴管理方案,官方的很多擴展也都是基于`Composer`的(關于`Composer`使用的更多討論參考后面的拓展討論)。
打開命令行窗口(windows用戶)或控制臺(Linux、Mac 用戶)并執行如下命令:
~~~
composer create-project topthink/think tp5
~~~
成功完成后切換到`tp5`目錄下面,執行如下命令:
~~~
php think run
~~~
會顯示類似信息:
~~~cmd
D:\www\tp5>php think run
ThinkPHP Development server is started On <http://127.0.0.1:8000/>
You can exit with `CTRL-C`
Document root is: D:\www\tp5/public
~~~
實際上運行了一個`PHP`內置的`web`服務器。
接下來,我們可以直接通過下面的地址訪問:
~~~
http://127.0.0.1:8000
~~~
就會看到框架內置的歡迎頁面。

至此,你的ThinkPHP安裝已經順利完成!
>[info] 當然,內置服務器僅供簡單的學習測試,最好還是安裝一個WEB服務器進行開發測試。
關于如何安裝`web`服務器,本書不做任何的描述,這是你學習PHP的基礎必備。我們后面假設你的運行環境沒有任何問題,并且能支持`PATH_INFO`。
>[danger] 注意,除非你能完全掌控并解決問題,否則不要更改任何目錄和文件的名稱和位置,容易導致不可預知的問題。
### 準備工作
為了更方便后面的學習和實例,我們最好做好幾項準備工作:
#### 第一:搭建`WebServer`以及數據庫環境
選擇和準備好你用的順手的`WebServer`,最好是配置好URL重寫和支持`pathinfo`的(否則容易遇到一些不可預知的麻煩,我見到太多新手卡在這個環節)。如果你還沒有的話,可以嘗試下 [WampServer3.0](https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0.0/),是個用于`Windows`的`web`服務器,并且自帶了數據庫服務,支持切換不同的PHP版本。
>[danger] 如果你實在怕麻煩,可以使用PHP內置的WEB服務器,也可以勝任本書的學習過程。
#### 第二:創建學習用的虛擬主機`Vhost`
使用你的`WebServer`創建一個`tp5.com`虛擬主機,目錄指向安裝后的`tp5/public`目錄(在本篇的拓展討論部分,有一個使用`WampServer3`添加虛擬主機的說明供參考)。
>[danger] 請注意本書的所有例子都假設你的訪問域名是`tp5.com`而不是`localhost`。如果你使用了其它的虛擬主機名稱,請自行調整訪問地址。
如果你暫時沒有任何服務器環境,也可以直接使用PHP內置的web服務器來學習測試,不過記得在你的`hosts`文件中添加:
~~~
127.0.0.1 tp5.com
~~~
然后在`tp5`目錄下面執行(下面的命令最好關閉你其它的`webServer`,否則可能會因為端口占用而不能成功啟動)
~~~
php think run -H tp5.com -p 80
~~~
> 記得把`php`可執行文件的路徑加入系統搜索路徑。
然后,你就可以直接訪問
~~~
http://tp5.com
~~~
看到前面出現的歡迎頁面了,你的ThinkPHP5學習之旅即將啟程^_^
#### 第三:開啟調試模式
`5.1`版本默認使用部署模式,在開發過程中建議統一開啟應用的調試模式,找到`config/app.php`文件,修改設置`app_debug`參數:
~~~
// 開啟調試模式
'app_debug' => true,
~~~
>[danger] 在你的應用真實部署上線后,務必確認關閉調試模式。
## 拓展討論
### 設置`Vhost`訪問
以`WampServer3.0`為例,說下如何添加`Vhost`,啟動你的`WampServer`后,打開瀏覽器,訪問:
~~~
http://localhost/
~~~
然后在頁面的左下角找到 `Add a Virtual Host`點擊

打開頁面如圖所示:

按照提示依次填寫域名(你的Vhost地址,例如`tp5.com`)、對應WEB目錄(注意`ThinkPHP5`的`web`目錄應該設置為`tp5/public`而不是`tp5`)和對應解析IP(一般無需填寫默認即可)。
提交后會顯示

在WampServer圖標上點擊右鍵選擇`Tools->Restart DNS`。

重啟DNS之后,你就可以使用`tp5.com`來訪問測試了。
>[danger] 如果你使用的是其它的WEB服務器或者其它系統,請自行百度完成`Vhost`的添加,以方便后面的測試。
### `Composer`注意事項
>[info] `Composer`是PHP的依賴關系管理工具,對原有的開發模式和類庫擴展機制是一種顛覆。原本你無論是下載還是`Git`獲取,一般都只能手動更新,而無法做到對依賴類庫的自動更新(雖然`Git`可以很方便更新,但仍然無法完成依賴更新),`Composer`提供了一種全新的安裝和更新方式,目前主流框架和類庫都已經支持`Composer`安裝方式了,使用簡單的命令行操作就可以安裝和更新類庫,支持`Linux`和`Windows`平臺。
如果還不理解,對于新手來說可以簡單理解為`Composer`是一種`PHP`開發趨勢,同時是你`PHP`開發的“素材庫”,你只需要簡單的`composer require`就可以最大程度簡化你的開發工作。
>[info] 人生苦短,我用 `Composer`
>
關于`Composer`的幾點使用提醒:
>[danger] 如果你不是在國外的話,建議進行下面的全局設置使用[中國鏡像](https://pkg.phpcomposer.com/ ),所有不愿意用`composer`的用戶大部分是因為沒有使用國內鏡像。
~~~
composer config -g repo.packagist composer https://packagist.phpcomposer.com
~~~
`Composer` 安裝的時候注意版本號,有時候框架一直在更新,而你可能只需要安裝特定版本的,那么可以指定版本號。
`composer`的安裝目錄一般不建議納入你的應用`Git`版本庫,`vendor`目錄(或者你安裝依賴的其它目錄)都應該被添加進` .gitignore`,然后讓所有開發人員使用`Composer`來安裝依賴包。
如果你的依賴庫有單獨的內部版本庫地址,你可以把`Composer`的源設置為本地的`GIT`版本庫,在`composer.json`文件中添加:
~~~
"repositories": {
"packagist": {
"type": "svn",
"url": "https://git.yourdomain.com"
}
}
~~~
最后,附上幾個`Composer`學習資源:
* https://packagist.org/ Composer安裝包列表
* http://www.phpcomposer.com 比較好用的中國鏡像(已經廢棄)
*
* http://docs.phpcomposer.com composer中文文檔
希望還在猶豫的朋友早日擁抱`Composer`!
### 代碼格式化
在你進行學習和開發的過程中,一定要養成代碼格式化的習慣,不要覺得寫出能運行的代碼就行了,代碼規范體現了一個從業者的素質,如果是團隊開發,應該保持代碼格式化的風格統一,基本上主流的IDE都可以支持代碼格式化操作。
如果`PHPStorm`可以使用`Ctrl + Alt + L`進行格式化(設置代碼樣式:File -> Settings -> Code Style ->PHP),`VSCode`和`Sublime Text`推薦安裝`phpfmt`插件。
> 筆者使用`Sublime Text 3`和`phpfmt`插件并設置了每次保存的時候自動進行代碼格式化,本書中的所有代碼都遵循統一的代碼規范。