PHP Conference Japan 2024

php.ini 节点列表

此列表包含您可以设置的 php.ini 节点,以便基于每个主机或路径配置您的 PHP 设置。这些节点是可选的。

这些节点不会直接影响 PHP。它们用于将其他 php.ini 指令组合在一起,并使其作用于特定主机或特定路径。

这些节点仅在 CGI/FastCGI 模式下使用,并且不能设置extensionzend_extension 指令。

节点
名称 可更改 变更日志
[HOST=] INI_SYSTEM  
[PATH=] INI_SYSTEM  

以下是配置指令的简短说明。

[HOST=<host>]

此节点允许您定义一组 php.ini 指令,这些指令将在指定的主机上生效。

示例 #1 为 dev. 域名启用全屏幕错误报告

[HOST=dev.site.com]
error_reporting = E_ALL
display_errors = On

[PATH=<path>]

此节点允许您定义一组 php.ini 指令,这些指令在脚本从指定路径运行时生效。

示例 #2 为受保护区域添加安全脚本

[PATH=/home/site/public/secure]
auto_prepend_file=security.php

添加注释

用户贡献的注释 8 条注释

7
public at grik dot net
15 年前
在 [HOST=...] 中,应该只使用服务器名称列表中的第一个服务器名称。

例如,如果您有
server_name example.com, example2.com;
并且将在浏览器中使用 www.example.com,
则对这两个地址都使用 [HOST=example.com] 在 php.ini 中。

PHP 不会查看 HOST 请求头(正如我预期的那样),而是查看 SERVER_NAME 参数(默认情况下是名称列表中的第一个,无论 HOST 是什么)。
2
robinhook at mail dot com
6 年前
在 Apache 2.4 和 php-fpm 7.1.16 下,php.ini 中的 HOST 和 PATH 节点似乎不适用于 php_value 或 php_admin_value open_basedir 或 include_path 指令。
phpinfo() 在主值和本地值中显示“无”。
1
robinhook at mail dot com
6 年前
抱歉我的注释。我读了一些不好的教程。
正确的语法是:directive = 'value'
而不是像这样的东西:php_value[directive] = "somevalue"
1
crash at lubyte dot de
14 年前
如果您使用单独的 PHP ini 文件来加载扩展(Debian、Fedora 和大多数其他发行版都是这样做的),[PATH=] 或 [HOST=] 将阻止加载这些 ini 文件中定义的扩展(extension= 和 zend_extension=)。

当我向 /etc/php5/cgi/conf.d(Debian 的默认值)添加 hosts.ini(我想为主机名定义一些默认值)时,我遇到了一些麻烦。手册中提到 extension= 和 zend_extension= 不允许在 [HOST=] 和 [PATH=] 中使用(见上文)。我发现您可以通过在定义之后添加 [PHP] 来轻松解决此问题。

例如 hosts.ini
[HOST=dev.example.com]
display_errors = on

[PHP]

这会将节点更改回 [PHP],在该节点中允许使用 extension= 和 zend_extension=。
1
leo
13 年前
刚刚开发了可能是第一个 php.ini hack,用于添加仅在使用 mod_php 时在 PHP 5.3 之前解析的命令。

<?php

# 默认情况下禁用 eAccelerator
eaccelerator.enable = 0

# 现在,为了防止与 Zend Optimizer+ 不兼容,
# 我们只想在 PHP 5.2 或更低版本中启用 eAccelerator。
[HOST=*]
eaccelerator.enable = 1

?>

这里发生了什么?在 PHP 5.3 中,引入了 php.ini 节点以基于每个主机设置 PHP

https://php.net/manual/en/ini.sections.php

但是,这些节点仅在 CGI/FastCGI 模式下有效,在使用 mod_php 时,PHP 5.2 和 PHP 5.3 解析 php.ini 文件的方式似乎仍然存在差异:PHP 5.3 忽略 [HOST=*] 下面的所有内容,而 PHP 5.2 则不会。

在上面的示例中,PHP 5.3 只读取 "eaccelerator.enable = 0",然后在无效命令 [HOST=*] 处停止。但是,PHP 5.2 似乎忽略了无效命令并解析了整个配置文件,最终得到 "eaccelerator.enable = 1"。
0
dasloch at absatzen dot de
4 年前
请注意,您无法在 [PATH=](可能还有 [HOST=])节点中有效设置 syslog.*,因为 syslogger 仅在每个 php-fpm 工作进程中初始化一次,而不是每个请求一次。
-1
z dot himdi at bita dot nl
13 年前
在 Windows IIS 7 服务器上,我注意到没有监听 [PATH=]。但是 [HOST=] 工作了。
-1
robert dot johnson at icap dot com
14 年前
添加 PATH= 仅适用于指定的路径,不包括子目录,您必须为每个子目录添加 PATH= 值。

此外,即使 phpinfo 识别并显示每个文件夹的值作为“本地”值,默认值作为“主”值,某些设置仍然无效。

'fastcgi.impersonate' 始终使用主设置。
To Top