---
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)

