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

che*_*xis 21 php xdebug phpstorm laravel

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

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

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

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

我已经在PHPStorm中配置了所有内容(启用远程调试,正确的端口等),并且使用"普通"PHP项目一切正常.

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

谢谢!

小智 31

php artisan serve除非您在ini文件中启用了调试,否则调试使用不起作用.

@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
Run Code Online (Sandbox Code Playgroud)

然后,这些选项-d不会传递给名为PHP的内置Web服务器.你可以在这里看到内置服务器的调用.

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

  1. 打开运行 - >编辑配置...
  2. 创建新的"PHP内置Web服务器"
  3. 设定值:

    • 主办: localhost
    • 港口: 8000
    • 文档根目录:选择Laravel的公共目录
    • 检查Use route script并选择server.phpLaravel项目的根目录.
    • 口译员选项: -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配置,则需要手动执行此操作

  • 对于 xdebug 3+ 使用此解释器选项: ```-dxdebug.mode=debug -dxdebug.start_with_request=trigger -dxdebug.client_port=9003 -dxdebug.client_host=127.0.0.1``` (6认同)
  • 请提供一个提醒,以确保启用了“开始侦听PHP调试连接”,如果不使用“调试”运行PhpStorm配置,则需要手动执行此操作。 (2认同)
  • “Laravel 的公共目录”在哪里? (2认同)
  • 对于较新版本的 Laravel,您可能需要进行一些更改: 1. 使用位于 `/vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php` 的 server.php 2. 设置“自定义”工作目录”到公共目录(默认为“/public”) (2认同)

Jso*_*owa 8

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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 开始监听 PHP 调试连接 在此输入图像描述
  • server.php管理运行后的首次连接php artisan serve和首次调试

浏览器


Jos*_*osh 5

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

工匠服务使用了与您的网络容器加载的ini文件不同的ini文件

通过键入查找

php --ini
Run Code Online (Sandbox Code Playgroud)

在我的Ubuntu盒子上,它位于

Loaded Configuration File:         /etc/php/7.0/cli/php.ini
Run Code Online (Sandbox Code Playgroud)

为您的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
Run Code Online (Sandbox Code Playgroud)

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

附加说明

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

xdebug.remote_autostart = 1
Run Code Online (Sandbox Code Playgroud)

参见https://xdebug.org/docs/all

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