如今,我们常使用vagrant虚拟环境与其提供的灵活性进行开发。不管你在什么平台上,你都不必再配置繁琐的开发环境,仅仅使用vagrant就可以配置一模一样的环境提供给你的同事、学生使用。
但是我们在虚拟环境中开发,使用Xdebug就有点麻烦了,因为在默认情况下,它只针对本地的主机提供服务。
Xdebug是一个PHP的扩展,它可以允许PHP开发者调试与分析代码,追踪错误。如果你不熟悉它,可以在看本篇文章之前,参考一些Xdebug的相关教程。
在这篇文章,我将教你如何在PHPStorm和Vagrant虚拟环境下配置Xdebug。
准备工作
准备一个vagrant虚拟环境,安装和启动Homestead(Laravel集成包),当你进入到Laravel的欢迎界面,代表准备工作已经完成了。
安装Xdebug
如果你在使用Homestead和一些其他内置Xdebug的LNMP一键安装包的话,可以跳过这一步。你也可以使用phpinfo()
函数查看Xdebug的安装情况。
或者通过查看PHP-FPM和PHP CLI的conf.d
目录:
ls /etc/php5/fpm/conf.d ls /etc/php5/cli/conf.d
如果你看到了xdebug.ini
的相关配置项,则代表它已经加载成功了。如果你使用了不带xdebug的集成包,可以去搜索引擎查看如何安装xdebug的教程。
配置xdebug.ini
为了允许xdebug的远程特性,我们需要修改它的配置文件,并且加上几条配置语句。Homestead的xdebug.ini
默认位置在/etc/php5/mods-available,找到以下语句:
zend_extension=xdebug.so
在这条语句下面,添加:
xdebug.remote_enable = on xdebug.remote_connect_back = on xdebug.idekey = "vagrant"
保存配置文件,重启Homestead或者PHP-FPM(sudo service php5-fpm restart
),这就是配置xdebug的全部过程了。
配置PHPStorm—服务器
PHPStorm也同样需要一些配置,首先我们在PHPStorm中打开Laravel项目目录:
然后,打开PHPStorm配置项,依次进入PHP->Servers,添加一个新服务器。给新主机起个名字并给它8000端口。在host的下面,把你项目的站点域名(本地)填上去(Homestead默认是homestead.app)。然后,做路径地图映射,这样就可以让PHPStorm定位虚拟环境中的目录。基本上,可以按照下面这张动图配置:
配置PHPStorm—进行Debug的配置
要在项目中运行debugger,我们需要创建一个debug环境。打开Run->Edit Configurations。在这里,创建一条「PHP Web Application 」的新配置项:
应用新的配置,并关闭此配置窗口。
测试一下
以上便是所有的配置过程了,下面我们来测试一下Xdebug是否可以正确的工作。
首先我们在Laravel项目的路由(app/routes.php
)中添加:
Route::get('/', function()
{
$a = [1, 2, 3, 4, 5];
array_pop($a);
return View::make('hello');
});
然后,在路由的代码中添加几个断点:
然后打开Run->Debug,选中你刚才添加的配置项,这时会在浏览器中弹出你的项目地址,如果项目被正确打开了,PHPStorm将会弹出debug的选项卡,里面记录的程序的运行流程和错误追踪。
总结
Xdebug本身十分容易使用,只是遇上vagrant和PHPStorm的时候配置起来会有些繁琐,基本上分为以下几步:首先在vagrant环境中安装xdebug,在xdebug.ini
中加上允许远程工作的语句。然后在PHPStorm的配置中正确配置debug服务器和目录映射就可以了。
这是我翻译的一篇文章,原文地址。通过这篇教程我成功配置好了Xdebug+PHPStrom+Vagrant,如果你碰上了什么问题可以在我这篇博文下面留言。
昨天折腾了半天都没搞定 ,今天看到你的文章重新走了一遍配置phpstorm就好了,非常感谢!
可是我真的很不喜欢IDE,虽然phpstorm感觉非常方便,但是写代码还是sublime vscode爽啊
Debug 不要加“PHP Web Application”,要增加一个“PHP Remote Debug”配置。在配置里面会填写 ide key,这样就不需要在 xdebug.ini 设置这个 key。
学习一下,大爱。
谢谢博主分享,受教啦
一直想问底下的链接是啥
有买链接的人,每月给20块,给他挂5个链接提权重。