xdebug.ini 和 php.ini 的区别是什么?

7

最近我在 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

我想知道这些文件之间的区别是什么,以及在 /etc/php/7.0/apache2/php.ini 中的设置如何受到影响。
此外,根据最佳实践,应该使用哪个文件?
如果在这些文件中重复配置不同的值,哪个会优先生效?
例如,如果在 /etc/php/7.0/apache2/php.ini/etc/php/7.0/mods-available/xdebug.ini 中都设置了 xdebug.remote_port = 9000,并且在 /etc/php/7.0/mods-available/xdebug.ini 中设置为 xdebug.remote_port = 9001,那么哪个值将被选择?
2个回答

8

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模块。这与apache的a2enmod类似,您可以在此处阅读有关此内容的详细信息。例如,使用sudo phpdismod xdebug关闭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();"

或者

$ php -r "phpinfo();" | grep xdebug

2
这取决于PHP是如何编译的。查看PHP编译方式,可以通过查看它正在加载的.ini文件列表及其加载位置来了解。
从命令行中输入以下内容并进行查看:
$ php -i | grep .ini

或者,您可以通过创建一个临时的PHP文件并在浏览器中访问它来了解这个问题。只需确保将其命名为难以找到的名称,并在完成后立即删除它;例如,/info-949w30.php。为什么?因为此报告可能会泄露完整的文件系统路径、版本号和其他细节。
<?php phpinfo();

PHP在编译时有两个预设的指令。

  • --with-config-file-path=path/to/main.ini
  • --with-config-file-scan-dir=/scan/this/dir/for/other.ini文件。

主要的.ini文件首先被加载,然后是扫描目录中按字母顺序加载的文件。这就是为什么你会看到很多.ini文件使用数字前缀。那是一种简单的方式来控制加载顺序。与目录中的其他文件相比,更改文件名。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接