首页 > 解决方案 > PHP 是否会自动扫描每个目录中的 INI 文件(即 .user.ini 样式的 INI 文件(如果 PHP 作为 Apache 模块运行,则为 .htaccess 文件))?

问题描述

我在运行Windows 10 Home Single Language 64-bit 操作系统的笔记本电脑上使用PHP 7.2.10

我已经在安装了Apache/2.4.34 (Win32)的笔记本电脑上安装了最新版本的XAMPP安装程序

我从PHP 手册中看到以下文本:

.user.ini 文件

自 PHP 5.3.0 起,PHP 支持基于每个目录的配置 INI 文件。这些文件仅由 CGI/FastCGI SAPI 处理。此功能淘汰了 PECL htscanner 扩展。如果您将 PHP 作为 Apache 模块运行,请使用.htaccess文件以获得相同的效果。

除了主php.ini文件之外,PHP 还会扫描每个目录中的 INI 文件,从请求的 PHP 文件的目录开始,一直到当前文档根目录(如 中设置 $_SERVER['DOCUMENT_ROOT'])。如果 PHP 文件位于文档根目录之外,则仅扫描其目录。

只有具有PHP_INI_PERDIRPHP_INI_USER模式的 INI 设置才能在 .user.ini 样式的 INI 文件中被识别。

两个新的 INI 指令user_ini.filenameuser_ini.cache_ttl 控制用户 INI 文件的使用。

user_ini.filename设置 PHP 在每个目录中查找的文件的名称;如果设置为空字符串,PHP 根本不会扫描。默认值为.user.ini

user_ini.cache_ttl控制重新读取用户 INI 文件的频率。默认值为 300 秒(5 分钟)。

以下是阅读上述文字后在我脑海中产生的疑问:

  1. PHP 是否会自动扫描每个目录中的INI files(即.user.ini-style INI files.htaccess files在 PHP 作为 Apache 模块运行的情况下))?我的意思是不需要指定包含的项目目录INI files(即.user.ini-style INI files.htaccess files如果 PHP 作为 Apache 模块运行))?
  2. 项目的每个目录是否都必须具有INI files(即.user.ini-style INI files.htaccess files在 PHP 作为 Apache 模块运行的情况下))?
  3. 项目的不同目录中存在的INI files(即.user.ini-style INI files.htaccess files在 PHP 作为 Apache 模块运行的情况下))是否可以具有具有不同值的相同指令或缺少某些指令或具有一些附加指令?
  4. 如何在与Apache Web 服务器.htaccess相关的文件中设置 PHP 指令?
  5. 子句“PHP 扫描每个目录中的 INI 文件”实际上是什么意思?这是否意味着 PHP 解析器会读取每个目录中的 INI 文件

请逐步提供我上述所有问题的答案。

谢谢你。

标签: phpapache.htaccessconfiguration-filesdirective

解决方案


1 - 是的,如果目录中有用户 PHP INI 和/或 .htaccess 文件,则会读取该文件并将覆盖系统 php.ini

2 - 不,不需要在每个目录中都有 PHP INI 或 htaccess 文件,并且大多数托管服务都不允许使用自定义 PHP INI 文件,并且会禁用 htaccess 文件中的“php_value”使用。

3 - PHP INI 文件从根目录扫描到当前目录。例如,如果您的默认最大上传大小为 50MB,但您的根目录 PHP INI 设置为 100MB,则 100MB 生效。但是,如果您在“Admin”目录中并且有一个 php ini 文件,其最大上传大小设置为 20MB,那么从 /admin 路径和所有子路径上传时,您将被限制为 20MB 文件(除非他们有自己的自己的 PHP INI 文件)。

4 - 如果您的网络主机允许,您可以在 .htaccess 文件中使用“php_value”。例如

php_value upload_max_filesize 100M

有关更多详细信息,请参见此处: Overriding php.ini on server

5 - 正如我在第 3 点中所说。 PHP INI 文件从根目录扫描到当前目录。例如,如果路径是 /admin/advanced,它将首先查看系统 PHP INI,然后检查根目录 (/) 并覆盖和值,然后转到管理目录并覆盖和值,最后是高级目录。

值得注意的是,如果您计划使用共享主机,那么您很可能无法使用自己的 PHP INI 文件,也无法在 HTACCESS 中使用 php_value,因为大多数提供商倾向于禁用这些功能。

有关详细信息,请参阅 PHP 手册:

对于 Apache 覆盖:


推荐阅读