xdebug.ini和php.ini有什么区别

nat*_*ral 4 php linux apache xdebug

最近,我在ubuntu 16.04机器上安装了lamp和php-xdebug。我发现现在有以下文件

/etc/php/7.0/apache2/conf.d/20-xdebug.ini

/etc/php/7.0/cli/conf.d/20-xdebug.ini

/etc/php/7.0/mods-available/xdebug.ini
Run Code Online (Sandbox Code Playgroud)

我在徘徊这些文件和设置之间的区别是什么 /etc/php/7.0/apache2/php.ini受到这些影响。

此外,根据最佳做法,应使用以下哪个文件?

如果在这些文件中使用不同的值重复配置,则优先?

例如,如果xdebug.remote_port = 9000在中/etc/php/7.0/apache2/php.ini和中/etc/php/7.0/mods-available/xdebug.ini设置了xdebug.remote_port = 9001,则将选择哪个值?

mka*_*erg 7

Ubuntu基于Debian。Debian及其衍生版本使用某种独特的方式来管理php和apache的扩展。

在列出的文件中:

  • /etc/php/7.0/apache2/conf.d/20-xdebug.ini/etc/php/7.0/mods-available/xdebug.ini的符号链接

  • /etc/php/7.0/cli/conf.d/20-xdebug.ini也是/etc/php/7.0/mods-available/xdebug.ini的符号链接

  • 您可以直接编辑/etc/php/7.0/mods-available/xdebug.ini,所做的更改将在启用该功能的任何地方影响。

命令phpenmodphpdismod可用确实启用或禁用PHP模块。这些就像a2enmodapache一样,您可以在这里阅读有关内容。例如,使用关闭XDebug sudo phpdismod xdebug。用打开sudo phpenmod xdebug。当您打开和关闭配置时,您的配置将被保留,因为您的更改始终保存在中mods-available,尽管PHP不在该目录中进行配置。实际上,当您使用来“禁用”模块时phpdismod,它只是从相应的文件夹中删除了符号链接,因此在php配置中未启用该模块。

最后,/etc/php/7.0/apache2/php.ini是系统范围配置的位置,该位置不是可以启用或禁用的模块。


这样,您的配置更改就xdebug.remote_port = 9000应该进入,/etc/php/7.0/mods-available/xdebug.ini因为它与XDebug有关。将其放在两个位置不是一个好主意(因为它会造成混乱),但是最后一个加载优先。这就是为什么mods-available目录中的许多文件在文件名中都有数字的原因-因此它们将以正确的顺序加载。

使用此phpinfo()函数可获得有关加载了哪些配置值以及从中加载了哪些ini文件的更多信息。例如:

$ php -r "phpinfo();"
Run Code Online (Sandbox Code Playgroud)

要么

$ php -r "phpinfo();" | grep xdebug
Run Code Online (Sandbox Code Playgroud)