## 练习0:安装和准备
> 任务:安装好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
~~~
会显示类似信息:
~~~
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
~~~
就会看到框架内置的欢迎页面。
![](https://box.kancloud.cn/b8840a109089c97cf79c5e34b2b3a704_759x295.png)
至此,你的ThinkPHP安装已经顺利完成!
> 当然,内置服务器仅供简单的学习测试,最好还是安装一个WEB服务器进行开发测试。
关于如何安装`web`服务器,本书不做任何的描述,这是你学习PHP的基础必备。我们后面假设你的运行环境没有任何问题,并且能支持`PATH_INFO`。
> 注意,除非你能完全掌控并解决问题,否则不要更改任何目录和文件的名称和位置,容易导致不可预知的问题。
### 准备工作
为了更方便后面的学习和实例,我们最好做好几项准备工作:
#### 第一:搭建`WebServer`以及数据库环境
选择和准备好你用的顺手的`WebServer`,最好是配置好URL重写和支持`pathinfo`的(否则容易遇到一些不可预知的麻烦,我见到太多新手卡在这个环节)。如果你还没有的话,可以尝试下[WampServer3.0](https://sourceforge.net/projects/wampserver/files/WampServer%203/WampServer%203.0.0/),是个用于`Windows`的`web`服务器,并且自带了数据库服务,支持切换不同的PHP版本。
> 如果你实在怕麻烦,可以使用PHP内置的WEB服务器,也可以胜任本书的学习过程。
#### 第二:创建学习用的虚拟主机`Vhost`
使用你的`WebServer`创建一个`tp5.com`虚拟主机,目录指向安装后的`tp5/public`目录(在本篇的拓展讨论部分,有一个使用`WampServer3`添加虚拟主机的说明供参考)。
> 请注意本书的所有例子都假设你的访问域名是`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,
~~~
> 在你的应用真实部署上线后,务必确认关闭调试模式。
## 拓展讨论
### 设置`Vhost`访问
以`WampServer3.0`为例,说下如何添加`Vhost`,启动你的`WampServer`后,打开浏览器,访问:
~~~
http://localhost/
~~~
然后在页面的左下角找到`Add a Virtual Host`点击
![](https://box.kancloud.cn/8f07c143c6b161088b8be3c2b52c6482_607x223.png)
打开页面如图所示:
![](https://box.kancloud.cn/e215bc91769f9f13683bbe1f1bfb60c1_1033x566.png)
按照提示依次填写域名(你的Vhost地址,例如`tp5.com`)、对应WEB目录(注意`ThinkPHP5`的`web`目录应该设置为`tp5/public`而不是`tp5`)和对应解析IP(一般无需填写默认即可)。
提交后会显示
![](https://box.kancloud.cn/ed5874ddcc8cb1627c61222c9741f1cb_1034x387.png)
在WampServer图标上点击右键选择`Tools->Restart DNS`。
![](https://box.kancloud.cn/be46bb86e2c43d5953e0a85e1a4ffd93_920x661.png)
重启DNS之后,你就可以使用`tp5.com`来访问测试了。
> 如果你使用的是其它的WEB服务器或者其它系统,请自行百度完成`Vhost`的添加,以方便后面的测试。
### `Composer`注意事项
> `Composer`是PHP的依赖关系管理工具,对原有的开发模式和类库扩展机制是一种颠覆。原本你无论是下载还是`Git`获取,一般都只能手动更新,而无法做到对依赖类库的自动更新(虽然`Git`可以很方便更新,但仍然无法完成依赖更新),`Composer`提供了一种全新的安装和更新方式,目前主流框架和类库都已经支持`Composer`安装方式了,使用简单的命令行操作就可以安装和更新类库,支持`Linux`和`Windows`平台。
如果还不理解,对于新手来说可以简单理解为`Composer`是一种`PHP`开发趋势,同时是你`PHP`开发的“素材库”,你只需要简单的`composer require`就可以最大程度简化你的开发工作。
> 人生苦短,我用`Composer`
关于`Composer`的几点使用提醒:
> 如果你不是在国外的话,建议进行下面的全局设置使用[中国镜像](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/](https://packagist.org/)Composer安装包列表
* [http://www.phpcomposer.com](http://www.phpcomposer.com/)比较好用的中国镜像(已经废弃)
* [http://docs.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`插件并设置了每次保存的时候自动进行代码格式化,本书中的所有代码都遵循统一的代码规范。