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

时间:2017-11-07 19:54:26

标签: php linux apache xdebug

最近我在ubuntu 16.04盒子上安装了灯和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中的设置受这些文件的影响。

另外,就最佳实践而言,应该使用哪些文件?

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

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

2 个答案:

答案 0 :(得分:4)

Ubuntu基于Debian。 Debian及其衍生产品使用了一种管理php和apache扩展的独特方式。

您列出的文件中包含:

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

  • /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,您可以阅读here。例如,使用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

答案 1 :(得分:1)

这取决于how PHP was compiled。通过查看正在加载的.ini文件列表以及加载它们的位置来了解PHP的编译方式。

在命令行中,键入以下内容并查看:

$ 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文件,然后按字母顺序加载scan-dir中的文件。这就是为什么你看到很多使用数字前缀的.ini文件的原因。这是一种控制负载顺序的简单方法。更改目录中其他文件的名称。