由于 .user.ini 是从公共目录中读取的,因此它的内容将被提供给任何请求它的用户,并有可能向他们显示敏感的配置设置。
将以下几行添加到您的 .htaccess 中以阻止对它的请求
<Files ".user.ini">
Require all denied
</Files>
PHP 支持在每个目录的基础上使用配置文件 INI 文件。这些文件仅由 CGI/FastCGI SAPI 处理。此功能使 PECL htscanner 扩展过时。如果您以 Apache 模块的方式运行 PHP,请使用.htaccess文件来实现相同的效果。
除了主php.ini文件之外,PHP 会扫描每个目录中的 INI 文件,从请求的 PHP 文件的目录开始,一直向上扫描到当前文档根目录(如$_SERVER['DOCUMENT_ROOT']中设置)。如果 PHP 文件位于文档根目录之外,则只扫描其目录。
在 .user.ini 类型的 INI 文件中,只有具有INI_PERDIR
和INI_USER
模式的 INI 设置会被识别。
两个新的 INI 指令,user_ini.filename和user_ini.cache_ttl控制 user INI 文件的使用。
user_ini.filename设置 PHP 在每个目录中查找的文件名;如果设置为空字符串,PHP 根本不会扫描。默认值为.user.ini
。
user_ini.cache_ttl控制重新读取 user INI 文件的频率。默认值为 300 秒(5 分钟)。
由于 .user.ini 是从公共目录中读取的,因此它的内容将被提供给任何请求它的用户,并有可能向他们显示敏感的配置设置。
将以下几行添加到您的 .htaccess 中以阻止对它的请求
<Files ".user.ini">
Require all denied
</Files>
如果您不知道 "PHP_INI_PERDIR" 或 "PHP_INI_USER" 是什么,或者它们与设置 .user.ini 文件有什么关系,请查看 ini.list 页面:https://php.net/manual/en/ini.list.php
基本上,"可更改" 列中标记为 PHP_INI_SYSTEM 的任何内容都无法在 .user.ini 文件中设置(所以不要尝试)。它只能在主 php.ini 级别设置。
对年轻玩家来说是个陷阱,不是说我自己是什么年轻玩家。
user_ini.cache_ttl 的默认设置为 300 秒,这意味着它每 5 分钟刷新一次。如果您正在调整 .user.ini 中的设置,可能需要长达 5 分钟的时间才能看到您实验的结果。
如果您无法访问可以更改此设置的 php.ini,那么您将不得不学会非常耐心。
"如果您使用的是 Apache,请使用 .htaccess 文件来实现相同的效果。"
为了澄清,这仅适用于 Apache 模块模式。如果您在 Apache CGI/FastCGI 服务器上将 php 指令放在 .htaccess 中,这会导致服务器出现 500 错误。因此,您不幸的是无法创建适用于两种类型托管的配置,至少没有简单的方法。
对于那些想要查看示例的人来说... .user.ini 应该格式化为一个简单的 [KEY]=[VALUE]\n 设置列表。例如,一个单行 .user.ini 文件,仅用于将最大允许上传文件大小更改为 5Mb:
upload_max_filesize="5M"
这篇文章应该更清楚一些。
"类似 .htaccess 的 INI 文件" 对我来说意味着 INI 设置必须遵循 .htaccess 中使用的语法,但事实并非如此!
您必须使用
register_globals=on
而不是
php_flag register_globals on
此外,如果您有较长的进程超时时间,更改可能需要一段时间才能传播到所有进程。
重新启动 php-fpm 可以更快地得到答案 :)
请注意,PECL htscanner 尚未在 PHP7.0 上运行。
"pecl install htscanner" 会抛出一个 "zend_hash_update’ undeclared'" 错误。