【问题标题】:How to debug php artisan serve in PHPStorm?如何在 PHPStorm 中调试 php artisan 服务?
【发布时间】:2015-12-23 04:08:44
【问题描述】:

我正在使用 PHPStorm 开发我的 PHP 网页。我的 Apache 服务器、XDebug 和一个简单的 Web PHP 项目都可以正常工作。没问题。

但是,当我尝试使用 php artisan serve 调试 Laravel 5.1 Web 项目时,我无法调试断点。这就像php artisan serve 使用另一个服务器...

在我的 PHPStorm 上,我总是看到:

等待带有 ide 键 '(randomNumberHere)' 的传入连接

我已经在 PHPStorm 中进行了所有配置(启用远程调试、正确的端口等),并且使用“正常”的 PHP 项目一切正常。

谁能告诉我是否需要改变一些东西?

谢谢!

【问题讨论】:

  • php artisan serve 确实使用另一台服务器,更准确地说是PHP Built-in web server
  • 好的,谢谢@Bogdan,但是你知道我需要做什么来调试 PHP 内置 Web 服务器吗?或者我需要将所有内容移至我的 apache 服务器...谢谢!
  • 到目前为止还没有尝试过,但请尝试查看PHPStorm documention 的主题。
  • 你做了什么?我有同样的问题。
  • 您使用的是 Debian/Ubuntu 吗?如果是这样,请记住它为 apache webserver php 模块和 php-cli 使用不同的 php.ini 文件。 php artisan serve 命令使用 cli .ini 文件。在我的 Ubuntu 上,它使用 /etc/php5/cli/php.ini/etc/php5/cli/conf.d/20-xdebug.ini。如果您将phpinfo(); 放在public/index.php 的顶部,则可以通过再次启动php artisan serve 来检查使用过的.ini 文件,然后打开给定的url。然后,您会看到您在“加载的配置文件”和“已解析的其他 .ini 文件”下使用了 .ini 文件。如果加载,Xdebug 也会有一个自己的部分。

标签: php laravel phpstorm xdebug


【解决方案1】:

我不使用 phpstorm,但也许我在 netbeans 中用于调试的解决方案会很有用。

artisan serve 使用与您的 Web 容器加载的不同的 ini 文件

通过键入找到它

php --ini

在我的 ubuntu 盒子上,它位于

Loaded Configuration File:         /etc/php/7.0/cli/php.ini

为您的 cli 环境编辑 ini,并使用您为 Web 容器启用它时使用的相同配置;

示例...

[Zend]
zend_extension=/usr/lib/php/20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000

对此唯一需要注意的是,只要您进行了此配置,它就会影响您使用 php cli 执行的其他操作。

补充说明

如果您希望调试会话始终自动启动(而不是通过 URL 请求参数 XDEBUG_SESSION_START=name 启动远程调试,例如,在调试 CLI 内容时),您可以将 XDEBUG 设置为始终使用此启动远程调试会话附加配置;

xdebug.remote_autostart = 1

https://xdebug.org/docs/all

通常您需要使用特定的 HTTP GET/POST 变量来启动远程调试(请参阅远程调试)。当此设置设置为 1 时,Xdebug 将始终尝试启动远程调试会话并尝试连接到客户端,即使 GET/POST/COOKIE 变量不存在。

【讨论】:

  • 对于 xdebug 3.0 使用 xdebug.mode=debug 和 xdebug.start_with_request=yes。
【解决方案2】:

除非您在 ini 文件中启用了调试功能,否则使用 php artisan serve 进行调试不起作用。

@Bogdan 指出了原因。 artisan serve 将调用 PHP 内置 Web 服务器,但不会传递 php 命令行选项(在 PHPStorm 中称为解释器选项)。

即如果你从命令行执行:

$ php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 artisan serve

那么-d 给出的这些选项不会传递给调用的PHP 内置Web 服务器。可以看到内置服务器here的调用。

PHPStorm 中的解决方法是创建一个直接调用 PHP 内置 Web 服务器的运行配置。说明:

  1. 打开运行 -> 编辑配置...
  2. 创建新的“PHP 内置 Web 服务器”
  3. 设置值:
  • 主持人:localhost
  • 端口:8000
  • 文档根目录:选择 Laravel 的公共目录/目录
  • 检查Use route script并在Laravel项目根目录中选择server.php
  • 解释器选项:-dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1
  1. 单击确定并运行。

现在 PHPStorm 将执行与 php artisan serve 相同的命令,并带有额外的解释器选项。实际上,php artisan serve 的唯一目的是将 server.php 附加到 PHP 内置 Web 服务器。 server.php 只是模拟 Apache 的 mod_rewrite 功能。

更新:@attila-szeremi 的好提醒:确保“开始侦听 PHP 调试连接”已启用,如果您不使用“调试”运行 PhpStorm 配置,您需要手动执行此操作

【讨论】:

  • 好的,这种方法有效,所以现在我不再从终端运行命令 php artisan serve ,而是单击 PHPStorm 中的“运行”按钮并能够在断点处中断。
  • 请提醒确保“开始侦听 PHP 调试连接”已启用,如果您不使用“调试”运行 PhpStorm 配置,您需要手动执行此操作。
  • 使用route*r* scripts
  • “Laravel 的公共目录”在哪里?
  • 对于 xdebug 3+ 使用这个解释器选项:-dxdebug.mode=debug -dxdebug.start_with_request=trigger -dxdebug.client_port=9003 -dxdebug.client_host=127.0.0.1
【解决方案3】:

所以,在经历了 Jeffry 的 Be Awesome in PhpStorm 之后,我陷入了与 OP 类似的情况(在有关 Xdebug 和 Laravel 的章节中)。我正在设置断点,但 PhpStorm 无法根据这些点中断执行。而且,老实说,乔希在这里的回答在一定程度上帮助我理解了这个问题,但对我来说还不够清楚。于是,我自己摸索出来,通过打法和试法找到了解决方案,最后的解决方案我想分享一下。可能对一些还在想的人来说,它会派上用场。

首先,正如 OP 所说/猜测的那样,php artisan server 确实使用另一台服务器。它是 PHP 内置的 web 服务器加上 server.php 路由器文件。它使用的配置是 CLI 配置。尝试php --ini 查找所有包含的配置。

在我的情况下(Ubuntu 17.10),包含的 Xdebug 配置文件来自位置 /etc/php/7.2/cli/conf.d/20-xdebug.ini。我添加了第二行来启用远程 xdebug,现在文件看起来像这样,总共有 2 行:

zend_extension=xdebug.so xdebug.remote_enable=1

现在开始配置 PhpStorm:

  1. Run > Edit Configurations 并提供任何名称或将其保留为 未命名
  2. 点击Server:选项后​​的...
  3. 点击+ 并输入任意名称(例如Laravel App
  4. Host 设置为 localhost,将 Port 设置为 8000,将 Debugger 设置为 Xdebug,并且不要选中任何其他复选标记!
  5. 点击Apply/OK
  6. 服务器的下拉列表中:选择我们刚刚设置的那个。
  7. 设置起始网址:要开始调试的网址(例如\user
  8. 选择您喜欢的浏览器。
  9. 点击Apply/OK

请记住,调试器只有在实际的 Web 服务器启动后才能工作,即以php artisan server 命令启动的服务器。

现在,启动网络服务器,即。 php artisan serve 并在 PhpStorm 中单击 Run > Debug 'your-debug-config',一切正常!

【讨论】:

    【解决方案4】:

    第 1 部分 运行 > 编辑配置

    选择 PHP-BuiltIn Web Server 并设置 主机:本地主机 端口:8000 // 或任何你使用的端口

    点击确定

    第 2 部分 安装 Xdebug helper Chrome 扩展

    在 Chrome 浏览器的右上角应该有一个 bug 图标 单击它并选择调试 这样灰色的虫子图标就会变成绿色

    现在当你运行 php artisan serve 并设置调试检查点

    然后点击手机图标“开始监听 Xdebug 连接”

    它应该会捕获您的调试检查点

    【讨论】:

      【解决方案5】:

      Jetbrains 在这里有一个指南操作方法https://www.jetbrains.com/help/phpstorm/laravel.html#debugging-artisan-commands

      所以,基本上你需要添加php script 并将其指向工匠文件+命令

      【讨论】:

        【解决方案6】:

        Xdebug 3.0 更新

        现在使用 XDebug 3.0 非常容易。我是如何在 phpstorm 中开启的。

        我的php.ini 配置:

        zend_extension = php_xdebug-3.0.0-7.4-vc15-nts-x86_64.dll
        xdebug.client_port = 9000
        xdebug.mode = debug
        

        为您的操作系统安装适当的 Xdebug 扩展:https://xdebug.org/docs/install

        PHPStorm 中的设置(我的版本 2020.2.3):

        • 开始监听 PHP 调试连接
        • 在运行php artisan serve 并首次调试后管理与server.php 的首次连接

        浏览器

        【讨论】:

          【解决方案7】:

          操作系统: Windows 10 pro

          这对我有用:

          php 8.0 和 xdebug 3+

          1.  zend_extension="c:\phplts\ext\php_xdebug.dll"
          2.  xdebug.mode=debug
          3.  xdebug.start_with_request=yes
          4.  xdebug.idekey=PHPSTORM
          5.  xdebug.client_host=127.0.0.1
          6.  xdebug.client_port=9003
          7.  xdebug.remote_handler=dbgp
          8.  xdebug.discover_client_host=1
          

          php 7.4 和 xdebug 2+

          1. zend_extension="c:\phplts\ext\php_xdebug.dll"
          2. xdebug.remote_autostart=1
          3. xdebug.default_enable=1
          4. xdebug.remote_port=9001
          5. xdebug.remote_host=127.0.0.1
          6. xdebug.remote_connect_back=1
          7. xdebug.remote_enable=1
          8. xdebug.idekey=PHPSTORM
          9. ;xdebug.profiler_enable = 0;
          10. ;xdebug.profiler_enable_trigger = 1;
          11. ;xdebug.profiler_output_dir="D:\www\php-projects\xdebug" # make sure folder created first and it is writable
          12. ;xdebug.profiler_output_name = "cachegrind.out.%t"
          

          PhpStorm

          1. 设置/首选项对话框中(Ctrl+Alt+S)点击PHP 在语言和框架下。
          2. php -> debug更改端口9001
          3. File > Settings > Languages & Frameworks > PHP > Debug > DBGp Proxy
            1. 添加ide键 PHPSTORM
            2. 更改端口9001
              1. 9003 用于 xdebug 3+

          有用的链接:

          1. Is it possible to use xdebug on php built-in web server?
          2. Xdebug for remote server not connecting

          【讨论】:

            猜你喜欢
            • 2016-10-01
            • 2015-03-12
            • 2018-09-19
            • 2017-03-20
            • 1970-01-01
            • 1970-01-01
            • 2022-11-04
            • 1970-01-01
            • 2019-05-08
            相关资源
            最近更新 更多