technology-note/php/2.vscode调试php.md
2022-01-20 16:33:50 +08:00

141 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: "20190521"
date: "2019-05-21 15:42:00"
title: "如何在vscode上调试php详细步骤"
tags: ["php", "vscode", "xdebug", "windows"]
categories:
- "php"
- "环境配置"
---
上一篇写了如何让 php 在 apache 下部署运行。这一批来说说如何用 vscode 调试 php。
写代码,调试是必不可少的,那么如何才能在 vscode 中调试 php 代码?下面所说的全部基于 windows 下,如果要部署到 linux 上,那必须 docker。
<!-- more -->
# 下载 xdebug
到[https://xdebug.org/download.php](https://xdebug.org/download.php)这里下载,主要这里有很多个版本,要选择适配当前安装 php 版本的.
首先通过上一篇中的`phpinfo()`,查看自己的 php 信息
![php信息](https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190522203012.png)
通过红圈圈出来的信息可以发现我们需要下载的是:
![下载xdebug](https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190523084935.png)
注意NTS 版本对于的是没有 TS 标志的 xdebug
下载解压,将解压后的文件放到 php 的安装目录下的 ext 目录中D:\Program Files\php-7.3.5\ext.
# 配置 xdebug
在 php 安装目录中编辑`php.ini`文件,如果不存在这个文件,新建一个。输入如下内容:
```ini
[XDebug]
zend_extension="D:\\Program Files\\php-7.3.5\\ext\\php_xdebug-2.7.2-7.3-vc15-x86_64.dll";
xdebug.remote_enable = 1;
xdebug.remote_autostart = 1;
xdebug.remote_port = "9002";
xdebug.remote_host = "127.0.0.1";
```
需要指定 xdebug 的完整路径,否则会在默认目录中查找,导致报错。
在控制台中输入如下`php -m`,检查 xdebug 是否生效,生效状态会显示 xdebug 如下所示:
![php价值成功xdebug](https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190523090243.png)
# vscode 调试 php
首先需要安装`php debug`这个插件,然后在配置文件`setting.json`中加入一行配置,配置 php 可执行文件路径:
```json
"php.validate.executablePath": "D:\\Program Files\\php-7.3.5\\php.exe"
```
然后就可以开始调试啦,写一个测试的 php 文件:
```php
<?php
echo "1";
echo "2";
echo "3";
echo "4";
?>
```
然后在调试面板新增 php 的调试配置文件:
![调试步骤1](https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190523091745.png)
只需修改调试端口即可,改为上面配置的 xdebug 端口
![](https://raw.githubusercontent.com/FleyX/files/master/blogImg/20190523091914.png)
最后打开要调试的文件,按`F5`就能断点调试啦.
注意要选择第一个调试配置,也就是`Listen for XDebug`.
**注意并不是访问 xdebug 的端口来调试,而是需要访问 web 服务器的端口。并将 web 服务器的目录设置为当前开发的目录。(这个问题浪费了半天的时间)**
# 配置 rest 服务
php 不同于其他的后端语言,并不能监听某个端口,然后对请求做出响应。因此如果想用 php 搭建 rest 服务,就需要配置访问任意路径都有通过同一个 php 文件来处理请求。下面介绍几种配置方法:
## nginx 配置
```properties
server {
listen 80;
server_name example.com;
index index.php;
error_log /path/to/example.error.log;
access_log /path/to/example.access.log;
root /path/to/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
}
```
## apache 配置
确保.htaccess 文件和 index.php 在同一个目录中。然后在.htaccess 文件加入如下:
```properties
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
```
此配置需要 Apache 启用 mod_rewrite 模块,并开启`AllowOverride All`配置。
## php 内置服务器
php 从 5.4.0 开始就自带一个内置服务器了,用于开发调试用,不能用于线上模式。通过如下命令启动:
```bash
php -S localhost:8888 -t public
```
- -S 指定端口
- -t 指定根目录
详细可查看官方文档:[点击跳转](https://www.php.net/manual/zh/features.commandline.webserver.php)