当前位置: 首页 > news >正文

ThinkPHP的安装运行和调试

文章目录

  • 环境
  • 准备工作
    • PHP
    • XAMPP
    • composer
    • xdebug
    • VSCode
  • ThinkPHP
    • 安装
    • 运行
      • ThinkPHP服务器
      • Apache
    • 控制器接口
    • 路由
    • 调试代码

环境

  • Windows 11 专业版
  • XAMPP 8.2.12
    • PHP 8.2.12
  • VSCode 1.103.0

准备工作

PHP

PHP和XAMPP二者选一即可。这次我选择了XAMPP。

XAMPP自带了PHP,其路径为: C:\xampp\php\php.exe 。如果安装了独立的PHP,并且添加了路径,在XAMPP环境下,仍然会使用其自带的PHP。在安装ThinkPHP的时候,反而会因为二者版本不一致带来问题。所以,我这次没额外安装PHP,就用XAMPP里的PHP吧。

XAMPP

参见我另一篇文档 https://blog.csdn.net/duke_ding2/article/details/147686647

启动Apache,打开浏览器,访问 http://localhost ,确认Apache工作正常,停止Apache。

注:在ThinkPHP的开发阶段,可以用ThinkPHP自带的 php think run 命令启动服务器,不需要Apache服务器。

可以把XAMPP自带的PHP加到路径里。如果不加,在下一步安装composer的时候,它也能找到XAMPP的PHP路径(真是神奇),并且很贴心的提供选项可以把PHP加到路径里。

composer

参见我另一篇文档 https://blog.csdn.net/duke_ding2/article/details/147281321

xdebug

参见我另一篇文档 https://blog.csdn.net/duke_ding2/article/details/147281321https://blog.csdn.net/duke_ding2/article/details/147686647

这次我下载的文件是 php_xdebug-3.4.5-8.2-ts-vs16-x86_64.dll ,把它放到了 C:\xampp\php\ext 目录下。

注意:该文件版本必须要和PHP版本匹配,否则启动Apache的时候,会报错。

接下来修改 php.ini 文件,添加如下内容:

[xdebug]
zend_extension=C:\xampp\php\ext\php_xdebug-3.4.5-8.2-ts-vs16-x86_64.dll
xdebug.mode = debug
xdebug.client_host = "localhost"
xdebug.client_port = 9003
xdebug.start_with_request = yes

VSCode

参见我另一篇文档 https://blog.csdn.net/duke_ding2/article/details/147281321

注:插件只需安装 PHP 即可。

在这里插入图片描述

ThinkPHP

安装

C:\xampp\htdocs 目录下,运行 composer create-project topthink/think xxx (其中 xxx 是项目名,可任意命名),报错如下:

PS C:\xampp\htdocs> composer create-project topthink/think xxx
Creating a "topthink/think" project at "./xxx"
Installing topthink/think (v8.1.3)Failed to download topthink/think from dist: The zip extension and unzip/7z commands are both missing, skipping.
The php.ini used by your command-line PHP is: C:\xampp\php\php.iniNow trying to download from sourceIn GitDownloader.php line 82:git was not found in your PATH, skipping source downloadcreate-project [-s|--stability STABILITY] [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--repository REPOSITORY] [--repository-url REPOSITORY-URL] [--add-repository] [--dev] [--no-dev] [--no-custom-installers] [--no-scripts] [--no-progress] [--no-secure-http] [--keep-vcs] [--remove-vcs] [--no-install] [--no-audit] [--audit-format AUDIT-FORMAT] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--ask] [--] [<package> [<directory> [<version>]]]

可见,缺少 “zip extension and unzip/7z commands”。解决办法是,在 php.ini 文件里,找到并取消注释以下行:

extension=zip

保存退出。然后再次运行 composer create-project topthink/think xxx ,这次安装成功了。

注意:如果安装了独立的PHP,且放在了Path里,版本和XAMPP的PHP不同,这里可能会报错。所以确保要用XAMPP自带的PHP。

注意:如果composer设置了镜像源,比如阿里云的镜像源:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

这里可能会报错404找不到,不知道是什么情况,还是把镜像源切换回官方源吧:

composer config -g repo.packagist composer https://packagist.org

注意:安装失败,重新安装时,要先删除 xxx 目录(如果已存在),否则会报错说目标目录已存在。

安装成功后,在当前目录下多出了 xxx 目录,这就是项目的根目录。进入该目录查看:

PS C:\xampp\htdocs\xxx> ls目录: C:\xampp\htdocs\xxxMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----  2025/08/13 星期三  18:14:27               app
d-----  2025/08/13 星期三  18:14:28                config
d-----  2025/08/13 星期三  18:14:27                extend
d-----  2025/08/13 星期三  18:14:27                public
d-----  2025/08/13 星期三  18:14:27                route
d-----  2025/08/13 星期三  18:14:27                runtime
d-----  2025/08/13 星期三  18:14:52                vendor
d-----  2025/08/13 星期三  18:14:27                view
-a----  2025/07/15 星期二  20:09:14            162 .example.env
-a----  2025/07/15 星期二  20:09:14            115 .gitignore
-a----  2025/07/15 星期二  20:09:14           2038 .travis.yml
-a----  2025/07/15 星期二  20:09:14           1149 composer.json
-a----  2025/08/13 星期三  18:14:48          37218 composer.lock
-a----  2025/07/15 星期二  20:09:14           1822 LICENSE.txt
-a----  2025/07/15 星期二  20:09:14           2037 README.md
-a----  2025/07/15 星期二  20:09:14            180 think

复制 .example.env.env ,内容如下:

APP_DEBUG = trueDB_TYPE = mysql
DB_HOST = 127.0.0.1
DB_NAME = test
DB_USER = username
DB_PASS = password
DB_PORT = 3306
DB_CHARSET = utf8DEFAULT_LANG = zh-cn

先不用修改它。

运行

ThinkPHP服务器

在该目录下( think 文件所在目录),启动ThinkPHP自带的服务器:

php think run

确认输出信息里没有报错,然后打开浏览器,访问 http://localhost:8000 ,如下:

在这里插入图片描述

说明ThinkPHP已经正确的安装、配置和运行。

注意:下面几个URL是等价的:

  • http://localhost:8000
  • http://localhost:8000/index.php/ 注意:结尾处必须要有 /
  • http://localhost:8000/index.php/index
  • http://localhost:8000/index.php/index/index

ThinkPHP的入口文件是 C:\xampp\htdocs\xxx\public\index.php ,参见官方文档 https://doc.thinkphp.cn/v8_0/entry_file.html ,里面明确说明:

入口文件位置的设计是为了让应用部署更安全,请尽量遵循 public 目录为唯一的 web 可访问目录,其他的文件都可以放到非WEB访问目录下面。

所以,访问 http://localhost:8000 ,就相当于访问 http://localhost:8000/index.php/ ,注意URL结尾处必须要有 /

index.php 文件会把请求导向 C:\xampp\htdocs\xxx\app\controller\Index.php 文件,该文件定义了Index类。在上面的URL里,并没有指定Controller以及其方法,默认类是 Index ,默认方法是 index() 方法。所以,其实完整的URL是: http://localhost:8000/index.php/index/index

Apache

XAMPP自带的Apache服务器,默认配置先不用修改。在浏览器里访问 http://localhost/xxx/public ,效果和上图一样。

同理,下面几个URL是等价的:

  • http://localhost/xxx/public
  • http://localhost/xxx/public/index.php 注意:结尾处可以省略 /
  • http://localhost/xxx/public/index.php/index
  • http://localhost/xxx/public/index.php/index/index

控制器接口

在上例中,在浏览器里访问 http://localhost:8000 ,实际所访问的后台文件是 C:\xampp\htdocs\xxx\app\controller\Index.php ,其内容如下:

<?phpnamespace app\controller;use app\BaseController;class Index extends BaseController
{public function index(){return '<style>*{ padding: 0; margin: 0; }</style><iframe src="https://www.thinkphp.cn/welcome?version=' . \think\facade\App::version() . '" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe>';}public function hello($name = 'ThinkPHP8'){return 'hello,' . $name;}
}

Index控制器是默认的控制器,其中,默认的是 index() 方法。

如果想要访问Index控制器的 hello() 方法,则在URL里控制器不能省略(否则会把 hello 当作控制器而非方法)。当然,URL里的 index.php 是可以省略的。

在浏览器里访问 http://localhost:8000/index/hello?name=Tom

在这里插入图片描述

注:也可以通过 http://localhost:8000/index/hello/name/Tom 来访问。

同理,如果是通过Apache访问,则URL有以下多种选择:

  • http://localhost/xxx/public/index/hello?name=Tom
  • http://localhost/xxx/public/index/hello/name/Tom
  • http://localhost/xxx/public/index.php/index/hello?name=Tom
  • http://localhost/xxx/public/index.php/index/hello/name/Tom

如果不用默认的Index控制器,而是创建一个新的控制器,比如,在同一目录下创建 My.php 文件,内容如下:

<?phpnamespace app\controller;use app\BaseController;class My extends BaseController
{public function index() {return 'aaa';}public function foo() {return 'OK';}
}

这样,就可以在浏览器里通过

  • http://localhost:8000/My
  • http://localhost:8000/My/index
  • http://localhost:8000/My/foo

来访问它们了。

路由

如果是POST请求,或者PHP文件在其它路径,则可通过路由来映射。

controller 目录下创建 api 目录,然后在 api 目录创建文件 Test1.php 如下:

<?phpnamespace app\controller\api;use think\Request;class Test1 {public function index(Request $request) {return json(['code'=> 200,'msg'=> 'OK']);}
}

在浏览器访问 http://localhost:8000/api/Test1/index (注意 T 要大写),报错如下:

在这里插入图片描述

无法访问,需要做路径映射。

打开 xxx/route/app.php 文件,添加如下内容:

Route::get('api/Test1/index','api/Test1/index');

现在,就可以访问了:

在这里插入图片描述

注意:页面右下角的调试图标不见了,这是因为方法里,返回的是 json(['code'=> 200,'msg'=> 'OK'])

如果在路径映射里,将其修改为 POST 请求:

Route::post('api/Test1/index','api/Test1/index');

由于在浏览器地址栏里访问的URL是 GET 请求,我们用 curl.exe 命令来访问:

PS C:\xampp\htdocs\xxx> curl.exe --silent -XPOST "http://localhost:8000/api/Test1/index" | jq .
{"code": 200,"msg": "OK"
}

注:这里使用了显式的 curl.exe 而非简写版的 curl ,是因为在PowerShell里,使用的 curlInvoke-WebRequest 的别名,其用法和我们熟悉的curl命令有一些差异,而 C:\windows\system32\curl.exe 的用法和Linux下的curl类似,所以,请确保使用的是后者(或者换成前者的用法)。

注:如果返回值不是JSON,比如是 return 'abc' ,则会输出了非常多的内容,是由于debug打开了,输出内容包含了debug信息。要想关闭debug,编辑项目根目录里的 .env 文件:

APP_DEBUG = false

确保此处设置为false。

如果不想关闭debug,也可以修改代码,令其返回JSON,就不会输出debug信息了。

调试代码

在VSCode中打开 C:\xampp\htdocs 目录。

在最左边点击“Run and Debug”面板,然后点击“create a launch.json”:

在这里插入图片描述

会在 C:\xampp\htdocs\.vscode 目录下生成 launch.json 文件如下:

{// Use IntelliSense to learn about possible attributes.// Hover to view descriptions of existing attributes.// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "Launch built-in server and Debug","type": "php","request": "launch","noDebug": false,"runtimeArgs": ["-S","localhost:8000","-t","."],"cwd": "${workspaceRoot}/.","serverReadyAction": {"action": "openExternally"}},{"name": "Launch built-in server and Profile","type": "php","request": "launch","noDebug": true,"runtimeArgs": ["-S","localhost:8000","-t","."],"cwd": "${workspaceRoot}/.","serverReadyAction": {"action": "openExternally"},"profile": true,"openProfile": true},{"name": "Listen for Xdebug","type": "php","request": "launch"}]
}

貌似不用修改,直接保存即可。

在VSCode里添加断点,选中“Listen for Xdebug”,然后点击左边的运行按钮:

在这里插入图片描述

再次发送CURL请求,就会停止在断点处:

在这里插入图片描述

这样,就可以单步调试了。

http://www.lryc.cn/news/624702.html

相关文章:

  • MCP协议演进:从SSE到Streamable HTTP的技术革命
  • SAP ABAP IS SUPPLIED
  • 【语法糖】什么是语法糖
  • Java+Vue构建资产设备管理系统,适配移动端与后台管理,实现全生命周期管理,涵盖采购、入库、使用、维护、报废等环节,提供完整源码,便于二次开发
  • 快速搭建项目(若依)
  • CentOS 7 LAMP快速部署WordPress指南
  • linux中的hostpath卷、nfs卷以及静态持久卷的区别
  • python+flask后端开发~项目实战 | 博客问答项目--数据库信息的基本配置与UserModel的创建,映射,关联
  • 【MySQL】超详细入门学习
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 【Python】Python Socket 网络编程详解:从基础到实践​
  • 云原生俱乐部-mysql知识点归纳(1)
  • 【前端面试题】JavaScript 核心知识点解析(第十四题解析到第二十二题)
  • 【牛客刷题】正六边形阴影面积计算
  • FastRTSP介绍
  • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
  • 多台服务器批量发布arcgisserver服务并缓存切片
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级(401)
  • Python入门Day18:模块与包(module package)
  • Spring Boot + Spring Kafka 集成
  • SMTPman,smtp ssl助力安全高效邮件传输!
  • Java 中表示数据集的常用集合类
  • 低端设备加载webp ANR
  • 安全存储之 SAES+HUK 使用技巧和常见问题 LAT1543
  • Rust 教程之简介000
  • CSS:水平垂直居中
  • 【银河麒麟桌面系统】配置匿名文件夹与用户认证共享服务
  • 2025年秋招Java后端面试场景题+八股文题目
  • AI 推荐系统云端部署实战:基于亚马逊云科技免费资源的工程实现
  • 从财务整合到患者管理:德国医疗集团 Asklepios完成 SAP S/4HANA 全链条升级路径