如何在另一个 php.ini 文件中包含一个 php.ini 文件?

Posted

技术标签:

【中文标题】如何在另一个 php.ini 文件中包含一个 php.ini 文件?【英文标题】:How do I include a php.ini file in another php.ini file? 【发布时间】:2010-11-26 09:10:29 【问题描述】:

【问题讨论】:

我对 RHEL/Fedora 如何完成 /etc/php.d/* 包含感兴趣。他们是否修补了 PHP 以使这成为可能? @gahooa 这就是我带我来到这里的问题。你有没有了解他们是如何完成 /etc/php.d/* 包含的? 请参阅下面接受的答案,这也回答了您的问题。你也可以执行 php -i (phpinfo() ) 并查看 php 是如何构建的 【参考方案1】:

你不能。阅读在线页面:

The configuration file

摘要:配置文件 (php.ini) 在 PHP 启动时被读取。 对于 PHP 的服务器模块版本, 这种情况只发生一次,当网络 服务器启动。对于 CGI 和 CLI 版本,它发生在每个 调用。

.user.ini files

总结:除了主要的 php.ini 文件,PHP 扫描 INI 文件 在每个目录中,从 请求的 PHP 文件的目录, 并努力发展到现在 文档根目录(如在 $_SERVER['DOCUMENT_ROOT'])。只有INI 模式 PHP_INI_PERDIR 的设置 并且 PHP_INI_USER 将被识别 .user.ini 样式的 INI 文件。

【讨论】:

我在发帖前阅读了这些内容,没有提及是否有可能。【参考方案2】:

我认为您不能从主 php.ini 文件中“包含”.ini 文件。

不过,一种可能的解决方案是在编译 PHP 时在配置行中使用此选项:

--with-config-file-scan-dir=PATH
    Set the path where to scan for configuration files

如果在编译时使用此选项,PHP 将查找此目录中的每个 .ini 文件,以及“普通”php.ini 文件。

我想这就是 Ubuntu 使用的,例如,它为每个下载的扩展使用不同的 .ini 文件,而不是修改 php.ini

php.ini 文件的路径是用这个选项定义的,在配置行:

--with-config-file-path=PATH
    Set the path in which to look for php.ini [PREFIX/lib]

不过,这可能意味着您必须重新编译 PHP——顺便说一句,这并不难——最难的部分是获得所需的依赖项。

还有,internals@mailling-list 上的帖子和我说的一样:config files and PHP_CONFIG_FILE_SCAN_DIR

【讨论】:

除了编译时间设置,还有一个环境变量PHPRC可以改变默认的php.ini(和其他可能的ini文件)目录。 当你在配置行说,这是什么意思?那是某处的文件吗?【参考方案3】:

您可以尝试使用ini_set 函数来模拟它。但正如“手册页”所示,并非所有 ini 选项都可以使用 ini_set 进行更改。不过,这绝对是一个有用的功能。

【讨论】:

【参考方案4】:

我为 php 安装了Memcached,但不确定如何确保它的 ini 包含在我的 php.ini 文件中,但事实证明,它自动包含在其中。您可以通过运行 php --ini 来验证正在加载的内容。

php --ini
Configuration File (php.ini) Path: /opt/local/etc/php5
Loaded Configuration File:         (none)
Scan for additional .ini files in: /opt/local/var/db/php5
Additional .ini files parsed:      /opt/local/var/db/php5/memcached.ini

【讨论】:

“php --ini”返回的配置文件路径听起来可能与网页返回的配置文件路径不同()。【参考方案5】:

也可以在~/.bashrc中定义路径

export PHP_INI_SCAN_DIR=/usr/local/lib/php.d

【讨论】:

它不是只能在 CLI 中工作而不能在 httpd 中工作【参考方案6】:

您似乎不能将一个 ini 文件包含到另一个文件中,因此它会被引用和加载。但是你可以设置php 通过告诉它要查看哪些文件夹来加载多个文件。

当使用FastCGI 设置时(也可能在 FPM 中,虽然我不确定),您可以从 PHP 包装器中导出环境变量。

你可以这样做:

export PHP_INI_SCAN_DIR=/etc/php5/cgi/conf.d:/var/www/mydomain.net/etc

/var/www/mydomain.net/etc 只是一个例子。这是您将其他 ini 文件放入的文件夹。看来这可以是一个: 分隔列表。

使用phpinfo.php(任意调用的文件仅包含<?php phpinfo();),在浏览器中打开相应的URL,并检查已解析的目录列表以及在其顶部区域加载的文件列表。

/etc/php5/cgi/conf.d 应该始终包含在内(我猜是因为它已编译到 PHP 可执行文件中)并且可能并不真正需要。

【讨论】:

【参考方案7】:

其实你可以。我刚刚使用 PHP-FPM 在Debian 9 (Stretch) 上对其进行了测试。从一些 .ini/.conf 文件中,使用以下语法:

include=/path/to/special-php.ini

甚至

include=/path/to/special-dir-full-of-conf-files/*.conf

因为它被用于

/etc/php/7.0/fpm/php-fpm.conf
include=/etc/php/7.0/fpm/pool.d/*.conf

顺便说一句,如果您按主题拆分设置,或者如果您想要一组用于开发而另一组用于生产,这将非常有用。然后你可以像 Debian/Apache 那样做

/etc/php/conf-available/
/etc/php/conf-enabled/

从第二个到另一个的符号和一个包含到那个。

【讨论】:

对我来说,这在 php-fpm.conf 中有效,但在 php.ini 中无效

以上是关于如何在另一个 php.ini 文件中包含一个 php.ini 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个 javascript 文件中包含 jquery [重复]

如何在另一个 XAML 文件中包含 XAML 图标

使用 QML 和 QtQuick2 时如何在另一个 .js 文件中包含 .js 文件?不涉及浏览器

GitHub Pages 上的 Jekyll:在另一个 markdown 文件中包含 markdown

是否可以在另一个中包含一个 CSS 文件?

在另一个 html 文件中包含 html [重复]