如何让Netbeans和Xdebug与NginX一起使用

时间:2017-01-08 01:15:00

标签: php nginx netbeans xdebug

我有一台Ubuntu 16.10笔记本电脑用于测试我开发的网站,最近我从Apache2切换到NginX。我使用Netbeans和Xdebug来调试我的PHP脚本。

使用NginX设置Xdebug的说明似乎非常简单。只需将以下行放在/etc/php/7.0/fpm/conf.d/20-xdebug.ini

zend_extension=/usr/lib/php/20160303/xdebug.so
xdebug.remote_port=9000
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_log=/var/log/xdebug.log

...然后使用sudo service nginx restart重新启动NginX。但这不起作用。

我检查了Stack Overflow上的答案,我找到了this one,它说我需要将以下代码放在配置文件中,但是,它似乎特定于PHP 5并且我运行的是PHP 7.0 ,它也只是指NginX配置文件而没有指定哪一个,所以我不确切知道它放在哪里。

location / {
        root /var/www/bresson/web/;
        include fastcgi_params;     
        fastcgi_param SCRIPT_FILENAME $document_root/dispatch.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

如何将Xdebug连接到NginX以便我可以使用Netbeans调试PHP?

1 个答案:

答案 0 :(得分:2)

找到答案here

虽然我并不完全确定是否有必要,但它会说出一些叫做#34; redis"的东西:

apt-get install php-redis

无论如何,我做到了。下一步是运行此命令:

可以忽略所有手动编译指令,因为所需的所有内容现在都在存储库中。我已经安装了Xdebug,NginX和所有东西。所以我跳到这一行:

sudo echo "zend_extension=xdebug.so" > /etc/php/7.0/mods-available/xdebug.ini

但是,长话短说,我通过反复试验发现这还不够。相反,我必须打开它并添加以下内容:

zend_extension = xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.var_display_max_depth = -1
xdebug.var_display_max_children = -1
xdebug.var_display_max_data = -1
xdebug.idekey = "PHPSTORM"

之后,我运行了这些命令:

ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/fpm/conf.d/20-xdebug.ini
ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini
service php7.0-fpm restart

运行php -m | grep -i xdebug检查结果,该结果应返回:

xdebug
Xdebug

然后我重新启动了所有内容,但这可能没有必要:

sudo service php7.0-fpm restart
sudo service nginx restart

然后,我通过在NetBeans中调试一个站点对其进行了测试,它确实有效!

<强>附录:

调试本地网站时,我一直收到503 Bad Gateway错误。似乎问题是Xdebug连接超时了。解决方案似乎是转到您正在调试的站点的配置文件,例如/etc/nginx/sites-available/local_example.conf,并且您想要在PHP部分添加一个名为fastcgi_read_timeout的参数。例如,这就是现在我的网站conf文件中的内容:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php7.0-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_read_timeout 600;
}

我将它设置为fastcgi_read_timeout 600;,以便我有10分钟的时间坐下来思考我在断点时做的事情。我寻找一个更全球化的环境,但无法找到它,所以这就是现在为我工作的解决方案。