如何在Visual Studio Code(VSCode)上运行或调试PHP

86

我找不到在Visual Studio Code上运行或调试PHP的方法,有人知道怎么做吗?


@WaiHaLee https://code.visualstudio.com - mkvlrn
2
我同意你的看法,文档非常差,难以理解,大多数答案也不完整,因此我们必须阅读数十个答案才能弄清楚我们做错了什么。ASP.NET调试设置起来要容易100倍(对于C#而言)。PHP的Web Matrix调试也是如此。 - Phil1970
我认为这个教程可能会有用:http://www.forevolve.com/en/articles/2016/08/04/php-with-visual-studio-code-and-xdebug/. 我还没有尝试过。我不明白为什么在VS Code上调试如此复杂,因为在Visual Studio和Web Matrix中都要简单得多。 - Phil1970
嘿,你可以按照这个指南进行操作:https://www.cloudways.com/blog/php-debug-with-xdebug/ - Shahroze Nawaz
那个指南绝对有效,因为我刚刚使用它成功了。https://jonathansblog.co.uk/remote-debugging-php-in-visual-studio-code-with-xdebug - 8ctopus
12个回答

59

使用vscode-php-debug扩展程序在VSCode中调试PHP

现在,通过市场扩展程序vscode-php-debug,VSCode可以支持调试PHP项目。

该扩展使用XDebug来实现,并允许您使用断点、监视、堆栈跟踪等功能:

在VSCode中使用vscode-php-debug扩展程序进行PHP调试的屏幕截图

从VSCode内部安装非常简单:使用F1调出命令行,然后键入ext install php-debug


2
我能使用本地的VSC安装来调试运行在服务器上的PHP代码吗? - Sushruth
1
它应该可以工作,但我没有测试过。请查看自述文件中的“远程主机调试”部分。 - flexponsive
7
安装可能很简单,但配置和让它真正工作起来却一点也不简单。 - John Kaster
16
如果您有任何问题,请联系我,我是这个扩展的作者。 - felixfbecker
1
虽然这个答案是正确的,请注意John Kaster的答案包含了这个,因为他提供的链接涵盖了所有的设置步骤。 - Ignacio Segura
显示剩余7条评论

26

据我今天了解,目前你只能调试node.js、JavaScript和TypeScript,但他们表示想添加可以调试的新语言。该编辑器仍在开发中。尽管如此,我认为未来不会有php调试器,因为php是服务器端语言,所以无法仅在客户端上调试它。

如果您想调试php,我可以推荐XDebug


更新:

现在,可以使用VS Code进行调试。您需要安装XDebugphp-debug扩展程序用于VScode。


15
这个答案有点奇怪,但我会尽力澄清。xDebug 是调试 PHP 的选项之一,它作为 PHP 扩展在您的服务器上运行。这是其中一面。另一方面是 xDebug 客户端。一些编辑器(例如 Sublime Text)有相应的客户端。这些客户端允许您在代码中设置断点,在处理请求时当 PHP 遇到断点时会停下来。所以我们需要一个适用于 VSCode 的 xDebug 客户端。希望这样能更清楚地说明问题。 - pmmaga
3
一旦完成这一步,接下来需要做什么才能使按下 F5 实际启动服务器并打开调试页面。这是最难理解的问题,但大多数答案甚至没有提供任何相关信息。我已经通过 IIS Web 平台安装程序安装了 PHP,并修改了 PHP.ini 文件,也复制了 XDebug DLL,但到那时,它仍然无法正常工作。 - Phil1970
@Phil1970,我想你的解释很棒)) 但是...为什么还是不起作用呢?!我按照你完美的说明设置了所有内容,但这也没有起作用。而且我记得我需要启动PHP文件,因为PHP可执行文件没有激活脚本就无法运行。VS Code不会自动执行。这取决于你。我认为在你的情况下,你应该“挂接”调试器到所需的PHP脚本,并开始执行该脚本。 - Alexander Leon Bulatov

16

有一种更简单的运行PHP的方法,无需配置:

  1. 安装Code Runner扩展
  2. 在文本编辑器中打开PHP代码文件
    • 使用快捷键Ctrl+Alt+N
    • 或按F1,然后选择/输入Run Code
    • 或右键单击文本编辑器,然后在编辑器上下文菜单中点击Run Code
    • 或在编辑器标题菜单中点击Run Code按钮
    • 或在文件资源管理器的上下文菜单中点击Run Code按钮

此外,您还可以选择部分PHP代码并运行代码片段。非常方便!


它是否会打开一个浏览器并允许浏览到网站的其他页面?否则,这个技巧对于严肃的调试来说并不是很有用。 - Phil1970
@Phil1970 Code Runner for php 主要用于运行独立的 php 代码片段,而不是为了调试整个网站。 - dimisjim

15

如果您不想安装xDebug或其他扩展程序,只想运行PHP文件而不进行调试,则可以使用构建任务来完成此操作。

使用构建任务(无需扩展)

首先打开命令面板(在Windows中按下Ctrl+Shift+P,在Mac中按下+Shift+P),然后选择“Tasks:Open User Tasks”。现在将我的配置复制到您的tasks.json文件中。这将创建用户级任务,可在任何工作区随时使用。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Start Server",
            "type": "shell",
            "command": "php -S localhost:8080 -t ${fileDirname}",
            "isBackground": true,
            "group": "build",
            "problemMatcher": []
        },
        {
            "label": "Run In Browser",
            "type": "shell",
            "command": "open http://localhost:8080/${fileBasename}",
            "windows": {
                "command": "explorer 'http://localhost:8080/${fileBasename}'"
            },
            "group": "build",
            "problemMatcher": []
        },
        {
            "label": "Run In Terminal",
            "type": "shell",
            "command": "php ${file}",
            "group": "none",
            "problemMatcher": []
        }
    ]
}

如果您想在终端中运行php文件,请打开命令面板并选择“任务:运行任务”,然后选择“在终端中运行”。
如果您想在Web服务器上运行代码以向Web浏览器提供响应,请打开命令面板并选择“任务:运行任务”,然后选择“启动服务器”以运行PHP内置服务器,然后选择“在浏览器中运行”以从浏览器中运行当前打开的文件。
请注意,如果您已经有一个Web服务器正在运行,您可以删除“启动服务器”任务并更新localhost:8080部分以指向您正在使用的任何URL。
使用PHP Debug
将以下配置复制到您的用户设置中:
{
    "launch": {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "php",
                "request": "launch",
                "name": "Run using PHP executable",
                "program": "${file}",
                "runtimeExecutable": "/usr/bin/php"
            }
        ]
    }
    // all your other user settings...
}

这将创建一个全局启动配置,您可以在任何PHP文件上使用它。请注意runtimeExecutable选项。您需要使用您机器上的PHP可执行文件路径来更新它。复制上面的配置后,每当您打开一个PHP文件时,您可以按F5键运行PHP代码,并在vscode终端中显示输出。


这是那些无法安装扩展的最佳答案。 - dukevin
同意。我还建议在 .vscode 文件夹内创建一个 tasks.json 文件,并在 PHP 启动服务器任务中使用 ${workspaceFolder} 而不是 ${fileBasename}。 - pref

15

我不理解PHP代码检查(linting)与调试有什么关系......当第四步完成后,我们要如何开始调试代码呢?按下F5并没有启动任何内容... - Phil1970
@Phil1970 我发布这篇文章以来,PHP Linting 可能已经发生了变化。我记得 PHP 7.x 是最低要求,才能正确地使用 linting,而且现在 VS Code 对它的插件支持可能更好了。 - John Kaster
1
这篇博客文章没有解释如何配置xdebug链接以在vscode中打开,但是在这里有解释:https://dev59.com/iq_la4cB1Zd3GeqPqUfM - Gregory Cosmo Haun

3

虽然已经有足够的帮助性答案了,但如果您想查看过程,请按以下步骤操作:

[ 点击此处 ]

简要步骤

[ 准备就绪 ]

  1. 确保您已重启本地服务器

来源 : https://www.youtube.com/watch?v=8MLEB1qx984


你能提供更多关于如何启动服务器的信息吗?我以为按下 F5 调试应用程序会自动启动服务器(或者在出现错误时显示适当的消息)。顺便说一下,我不知道视频是否有所需的信息但是听起来很难受。 - Phil1970

3
值得注意的是,您必须在Visual Studio Code中打开项目文件夹才能使调试器正常工作。我曾经只打开了一个单独的文件并花费了几个小时让它正常运行。
问题解释可以在这里找到。

1
哈哈,我刚刚在尝试让它工作了几个小时后读到这篇文章,发现只是因为我打开了一个文件夹它就开始工作了!! - Andrew Schultz

1
如果您正在使用Ubuntu 16.04和php7,则可以使用以下命令安装xdebug:
sudo apt-get install php-xdebug

您可以在这里找到完整的配置过程。

如果您使用的是Windows,您可以从xdebug.org下载xdebug。

并使用php-debug扩展在VS Code中开始调试。

how to configure php-debug for xdebug


和其他答案一样,您没有提供太多关于在指定页面上启动服务器和Web浏览器后要做什么的信息。 - Phil1970

1

要使用VSCode调试PHP,您需要以下内容:

  1. 安装了PHP调试插件(XDebug)的VSCode;
  2. 下载并配置了XDebug.so/XDebug.dll的PHP;
  3. 一个Web服务器,比如Apache/Nginx或者什么也不用(使用PHP内置服务器)。

您可以按照VSCode官方指南轻松完成步骤1和2。强烈建议使用XDebug安装向导验证XDebug配置。

如果您想要在没有单独的Web服务器的情况下调试,PHP内置服务器可能是一个选择。通过使用php -S localhost:端口号 -t 您的项目路径命令启动内置服务器,并将您的项目目录设置为文档根目录。您可以参考这篇文章获取更多详细信息。


这个问题已经在2年前得到了回答。 - Maciej Jureczko
我在想是否可以使用IIS来运行PHP...每次想要调试时,我是否必须键入上述命令? 对我来说,不使用 F5 启动服务器似乎很愚蠢。 - Phil1970
@MaciejJureczko 即使您认为这个问题在2年前已经得到了回答,但今天文档仍然很差,对于那些过去只使用ASP.NET + Visual StudioPHP + Web Matrix的人来说,在网上找到信息非常困难。 大多数其他答案都没有讨论如何启动Web服务器。 - Phil1970
@Archman 我们每次都需要启动服务器吗?如果是这样,我们应该在按下 F5 开始调试之前启动它吗?对我来说,开始调试不会启动服务器似乎很奇怪。 - Phil1970
@Phil1970 我们不需要每次重启服务器,F5表示开始调试,服务器一直在运行(F5不会启动任何服务器)。 - Archman
显示剩余2条评论

1

XDebug更改了一些配置设置。

旧设置:

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9000

新设置:

xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port=9000

所以你应该把后者粘贴到php.ini文件中。 更多信息:XDebug变更配置设置

谢谢,xdebug.start_with_request=yes解决了问题! - jv-k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接