当前位置: 首页 > 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.dtcms.com/a/336978.html

相关文章:

  • 动态规划----3.打家劫舍
  • EasyExcel篇
  • C语言篇:猜数字游戏的实现教程
  • 20250818 割点 割边 点双总结
  • 一个基于纯前端技术实现的五子棋游戏,无需后端服务,直接在浏览器中运行。
  • 数据挖掘 3.5 支持向量机——边界和正则化
  • 二分查找例题
  • 从基础到架构的六层知识体系
  • 进阶向:人物关系三元组,解锁人物关系网络的钥匙
  • 如何新建一个自己的虚拟环境
  • 有向无环图(Directed Acyclic Graph, DAG)介绍(环检测、DFS法、Kahn算法、)
  • 【Langchain系列三】GraphGPT——LangChain+NebulaGraph+llm构建智能图数据库问答系统
  • 15.三数之和
  • InfluxDB 开发工具链:IDE 插件与调试技巧(二)
  • 01.Linux小技巧
  • 从 UI 角度剖析蔬菜批发小程序的设计之道——仙盟创梦IDE
  • STRIDE威胁模型
  • IDE开发系列(1)基于QT的简易IDE框架设计
  • 【P38 6】OpenCV Python——图片的运算(算术运算、逻辑运算)加法add、subtract减法、乘法multiply、除法divide
  • 实践笔记-VSCode与IDE同步问题解决指南;程序总是进入中断服务程序。
  • 面试 TOP101 二叉树专题题解汇总Java版(BM23 —— BM41)
  • 深入解析StatefulSet与K8s服务管理
  • 集成电路学习:什么是Face Detection人脸检测
  • 多线程初阶-线程安全 (面试和工作的重点!!!)
  • Vue2篇——第六章 Vue 路由(VueRouter)全解析
  • Linux系统网络排查工具总结
  • org.apache.kafka.clients 和 org.springframework.kafka 的区别
  • kafka 发送消息有哪些模式?各自的应用场景是什么?
  • Elasticsearch全文检索中文分词:IK分词器详解与Docker环境集成
  • AI编程工具对决:Kilo vs Augment 开发Flutter俄罗斯方块游戏实战对比