在 [HOST=...] 中,应该只使用服务器名称列表中的第一个服务器名称。
例如,如果您有
server_name example.com, example2.com;
并且将在浏览器中使用 www.example.com,
在 php.ini 中为这两个地址使用 [HOST=example.com]。
PHP 不会查看 HOST 请求头(正如我所预期的那样),而是查看 SERVER_NAME 参数(默认情况下是名称列表中的第一个,无论 HOST 是什么)。
此列表包含您可以设置的 php.ini 部分,以在每个主机或路径的基础上配置您的 PHP 设置。这些部分是可选的。
这些部分不会直接影响 PHP。它们用于将其他 php.ini 指令分组在一起,并使它们对特定主机或特定路径起作用。
这些部分仅在 CGI/FastCGI 模式下使用,并且不能设置 extension 和 zend_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
在 [HOST=...] 中,应该只使用服务器名称列表中的第一个服务器名称。
例如,如果您有
server_name example.com, example2.com;
并且将在浏览器中使用 www.example.com,
在 php.ini 中为这两个地址使用 [HOST=example.com]。
PHP 不会查看 HOST 请求头(正如我所预期的那样),而是查看 SERVER_NAME 参数(默认情况下是名称列表中的第一个,无论 HOST 是什么)。
这些 HOST 和 PATH 部分似乎在 Apache 2.4 下的 php.ini 中不适用于 php-fpm 7.1.16 的指令 php_value 或 php_admin_value open_basedir 或 include_path。
phpinfo() 在主值和本地值中显示“无”。
对备注表示歉意。我读了一些错误的教程。
正确的语法是:directive = 'value'
而不是像这样:php_value[directive] = "somevalue"
如果您有一个系统,它使用单独的 PHP ini 文件来加载扩展(Debian、Fedora 和大多数其他发行版都是这样做的),[PATH=] 或 [HOST=] 将阻止加载那些 ini 文件中定义的扩展(extension= 和 zend_extension=)。
我在将 hosts.ini 添加到 /etc/php5/cgi/conf.d(Debian 的默认值)时遇到了一些麻烦,我想在那里为一个主机名定义一些默认值。手册说 extension= 和 zend_extension= 不允许在 [HOST=] 和 [PATH=] 中(见上文)。我发现你可以通过在定义之后添加 [PHP] 来轻松解决这个问题。
例如 hosts.ini
[HOST=dev.example.com]
display_errors = on
[PHP]
这将把部分改回 [PHP],允许使用 extension= 和 zend_extension=。
刚刚开发了可能是第一个 php.ini 技巧,用于添加在使用 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”。
请注意,您不能在 [PATH=](可能还有 [HOST=])部分中有效地设置 syslog.*,因为 syslogger 仅在每个 php-fpm 工作进程初始化一次,而不是每次请求都初始化一次。
添加 PATH= 仅适用于指定的路径,不包括子目录,您必须为每个子目录添加 PATH= 值。
此外,某些设置即使 phpinfo 识别并显示每个文件夹的值作为“本地”值,并将默认值显示为“主”值,也无效。
'fastcgi.impersonate' 始终使用主设置。