本书是在多个真实的项目中用到的技术,会不断的扩充或更新。由于 Thinkphp 功能细节甚多,本书只实录了开发过程中可能遇到关键的问题。 ## ThinkPHP6 的运行环境 * 兼容 `PHP 8.0`,实践环境为 `8.2.11` ### 安装Composer 本项目同时在`Win10`、`Linux` 和 `Mac OS X` 下开发,故列出`Thinkphp8` 在各平台上的安装步骤。 ### Linux 或 Mac OS命令行: Linux用户不要使用 `apt install composer`, 这样安装的是低版本的composer,请使用下面的命令行安装最新版的composer。 ~~~ curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer ~~~ ### Mac OS: 除了使用上面介绍的Linux 下的方式安装,也可以通过`brew install composer`安装,当然这之前,你需要先安装 `brew`(MacOS下软件包管理工具)。`brew` 的安装方法见下。 ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ``` ### 更改安装源: 如果你之后的命令操作很慢,可能是网络不太好(大部分的软件都在国外的服务器上),你可以采用下面的步骤,更改成国内的下载源。一般网速慢会有如下的反馈。 `https://repo.packagist.org could not be fully loaded (curl error 28 while downloading https://repo.packagist.org/packages.json: Operation timed out after 10005 milliseconds with 0 out of 0 bytes received), package information was loaded from the local cache and may be out of date` 打开命令行窗口(Microsoft Windows用户)或控制台(Linux、Mac 用户)执行如下命令: ~~~ composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ ~~~ ### 安装稳定版 在命令行下面,切换到 `WEB` 根目录下面并执行下面的命令: ~~~ composer create-project topthink/think <project_dir> ~~~ 这里的`<project_dir>`就是要开发项目的根目录,根据实际情况改写。 安装成功后会给出类似下面的提示。 ``` ... 此处省略 N 行... 12 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files > @php think service:discover Succeed! > @php think vendor:publish Succeed! 6 packages you are using are looking for funding. Use the `composer fund` command to find out more! ``` ### 更新`ThinkPHP` 如果之前已经安装过,切换到项目的根目录,执行: ~~~ composer update topthink/framework // 全部更新,务必备份好 `vendor` 目录 composer update ~~~ 更新操作会覆盖`thinkphp`核心目录,但不会影响`app`目录,因此不要在核心框架目录之外编写你的代码或者放置第三方类库。这可能会在以后的升级中被覆盖。 ### 开发模式 在开发阶段,在根目录建立一个`.env`文件,内容参见`.example.env`,并开启调试模式。上线部署后直接删除`.env`文件即可。`.env`文件支持支持定义多个环境变量配置文件,配置文件命名规范为: ~~~ .env.example .env.testing .env.develop ~~~ 该文件格式可能存在问题,在`Linux` 下面的`vim`编辑器中不能正确换行。可以使用`:%s/^M/\r/g`进行替换操作。 然后,需要在入口文件中指定部署使用的环境变量名称: ~~~ // 执行HTTP应用并响应 $http = (new App())->setEnvName('develop')->http; $response = $http->run(); $response->send(); $http->end($response); ~~~ 或者 ``` // // .env.debug & .env $http = in_array($_SERVER['REMOTE_ADDR'], ['22.24.24.20']) ? (new App())->setEnvName('debug')->http: (new App())->http; ``` 调试模式的参数见下: ~~~ APP_DEBUG = true // 其余部分视情况可删除 ~~~ 也可以使用命令操作,如下。 ``` cp .example.env .env cp .example.env .env.debug ``` ### 测试运行及部署 在实际部署中,应该是绑定域名访问到`public`目录,安全起见,一定要确保其他目录不在 `WEB` 目录下面。下面给出`Nginx`的配置代码,供参考。 ~~~ server { listen 80; server_name localhost; root /var/www/<project_name>/public; index index.html index.htm index.php; location / { if (!-e $request_filename) { //多入口需要配置多行 //rewrite /install.php(.*)$ /install.php?s=$1 last; rewrite ^(.*)$ /index.php?s=$1 last; //rewrite ^(.*)$ /index.php$1 last; break; } } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; #fastcgi_pass unix:/var/run/php/php-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } ~~~ 浏览网页,检查是否成功。