如何在PHPStorm中调试php artisan服务?

时间:2015-09-25 10:32:38

标签: php laravel phpstorm xdebug

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

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

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

  

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

我已在PHPStorm中配置了所有内容(启用了远程调试,正确的端口等),而“正常”的PHP项目一切正常。

有人可以告诉我是否需要更改某些内容吗?

谢谢!

6 个答案:

答案 0 :(得分:24)

除非您在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. Open Run - >编辑配置......
  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
  4. 好的并运行。

  5. 现在,PHPStorm将执行与php artisan serve相同的命令以及其他解释器选项。实际上php artisan serve唯一的目的是将server.php附加到PHP内置Web服务器。 server.php只是模仿Apache的mod_rewrite功能。

    更新:来自@ attila-szeremi的好提醒:确保"开始倾听PHP调试连接"已启用,如果您未使用" Debug"

    运行PhpStorm配置,您需要手动执行此操作

答案 1 :(得分:3)

我没有使用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时,即使GET / POST / COOKIE变量不存在,Xdebug也将始终尝试启动远程调试会话并尝试连接到客户端。

答案 2 :(得分:1)

因此,在经历了Jeffry的 在PhpStorm中的令人敬畏 后,我遇到了与OP类似的情况(在关于Xdebug和Laravel的章节中)。我正在设置断点,但PhpStorm无法根据这些点破坏执行。而且,说实话,Josh的答案在某种程度上帮助我理解了这个问题,但对我来说还不够清楚。所以,我出去通过命中和试用方法自己找到了解决方案,这是我想要分享的最终解决方案。对于一些仍在疑惑的人来说,它可能会派上用场。

首先,正如OP所说/猜测的那样,php artisan server 确实使用其他服务器。它是PHP内置的Web服务器 plus 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. 点击服务器选项
  3. 后的...
  4. 点击+并提供任何名称(例如 Laravel App
  5. 主机设置为localhost,将端口设置为8000,将调试器设置为Xdebug并离开任何其他复选标记未经检查!
  6. 点击Apply / OK
  7. 服务器的下拉列表中选择我们刚设置的那个。
  8. 设置起始网址您要开始调试的网址(例如\user
  9. 选择您喜欢的浏览器。
  10. 点击Apply / OK
  11. 请记住调试器只能在实际的Web服务器启动后才能运行,这是以php artisan server命令启动的服务器。

    现在,启动Web服务器即。 php artisan serve和PhpStorm点击Run> Debug 'your-debug-config',一切都应该正常工作!

答案 3 :(得分:1)

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调试连接 enter image description here
  • 运行server.php并进行首次调试后,管理与php artisan serve的首次连接

浏览器

答案 4 :(得分:0)

第1部分 运行>编辑配置

选择PHP内置Web服务器 然后设置 主机:localhost 端口:8000 //或使用的任何端口

enter image description here

点击确定

第2部分 安装Xdebug帮助程序Chrome扩展程序

enter image description here

在Chrome浏览器中,右上角应该有一个错误图标 单击它,然后选择“调试” 以便灰色的bug图标将颜色更改为绿色

enter image description here

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

enter image description here

并单击电话图标以“开始侦听Xdebug连接”

enter image description here

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

答案 5 :(得分:0)

Jetbrains在这里https://www.jetbrains.com/help/phpstorm/laravel.html#debugging-artisan-commands

有一个指南。

因此,基本上,您需要添加php script并将其指向工匠文件+命令 enter image description here