最近我在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
将选择哪个值?
答案 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的符号链接
命令phpenmod
和phpdismod
可用于启用或禁用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
文件的原因。这是一种控制负载顺序的简单方法。更改目录中其他文件的名称。