我有一台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?
答案 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分钟的时间坐下来思考我在断点时做的事情。我寻找一个更全球化的环境,但无法找到它,所以这就是现在为我工作的解决方案。