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

问题描述 投票:17回答:4

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

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

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

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

我已经在PHPStorm中配置了所有(启用远程调试,正确的端口等),并且使用“普通”PHP项目都可以正常工作。

有人可以告诉我,我是否需要改变一些东西?

谢谢!

php laravel phpstorm xdebug
4个回答
26
投票

除非您在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
  4. 好的,然后运行。

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

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


4
投票

我不使用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也将始终尝试启动远程调试会话并尝试连接到客户端。


1
投票

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

首先,正如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. 将主机设置为localhost,将端口设置为8000,将调试器设置为Xdebug,并将任何其他复选标记设置为未选中!
  5. 点击Apply / OK
  6. 从Server的下拉列表中选择我们刚设置的那个。
  7. 设置起始URL:您要开始调试的URL(例如qazxsw poi)
  8. 选择您喜欢的浏览器。
  9. 点击\user / Apply

请记住,调试器仅在实际的Web服务器启动后才能工作,这是以OK命令启动的服务器。

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


1
投票

第1部分运行>编辑配置

选择PHP-BuiltIn Web Server,只需设置Host:localhost Port:8000 //或者您使用的任何一个

Debug 'your-debug-config'

单击确定

第2部分安装Xdebug helper Chrome扩展

enter image description here

在Chrome浏览器中,右上角应该有一个错误图标单击它并选择Debug,以便灰色错误图标将颜色更改为绿色

enter image description here

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

enter image description here

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

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.