# INI 验证器

在服务拒绝启动之前，验证 php.ini、my.cnf、桌面条目或工具设置等 INI 配置文件。验证器会读取每一行，接受分区、键值对、注释和带引号的值，并报告无法识别的行、未闭合的分区标题、空键和未闭合的引号。它还会标记重复的键和分区，并列出每个分区及其键，方便你一目了然地检查结构。

## 常见问题

### 这里的 INI 文件符合什么条件才算有效？

每个非空行都必须是分区标题（如 [database]）、带值的键（如 host = localhost）或注释。既不属于这些情况的行、未闭合的分区标题、空键或未闭合的带引号值都会被视为错误。错误会使文件无效，并附上行号列出。

### INI 没有统一标准。验证器采用哪些规则？

它遵循 PHP、MySQL 和许多工具常用的方言：键和值以 = 分隔；若没有 =，则以 : 分隔。注释以 ; 或 # 开头；未加引号的值中，空白字符后面的 ; 或 # 会开始一条行内注释。分区名称可以包含空格、句点和引号，例如 Git 风格的分区。由于 INI 没有数据类型，因此不会检查值的类型。

### 重复的键会怎样处理？

同一分区中重复定义的键会作为警告报告，并标出第二次定义所在的行。大多数 INI 解析器会保留最后一个值，因此较早定义的值会被静默忽略。文件仍会报告为有效。

### 重复的分区会怎样处理？

重复出现的分区标题会作为警告报告，其键会与首次出现的分区中的键合并。有些程序对重复分区的处理方式不同，因此通常最好将它们合并。

### 支持 extension[] 这样的数组键吗？

支持。以 [] 结尾的键会将其值收集为列表，如 PHP 配置文件中的做法；重复定义此类键不会被报告为重复项。分区列表中只会显示该键一次。

### 什么是全局键？

出现在第一个分区标题之前的键不属于任何分区。结果中会将它们列为“全局键”，许多工具会将它们视为默认值或顶层设置。

### 带引号的值如何处理？

双引号中的值可以包含 ;、# 和 =，并支持转义序列 \", \\, \n 和 \t；单引号中的值则按字面内容处理。带引号的值若未在同一行闭合，就会被视为错误。未加引号的值会去除前后的空格。

### 会列出多少结构信息？

结果会列出每个分区、键的数量及键名，最多显示 200 个分区和每个分区 50 个键，并显示分区和键的总数。最多显示 20 个错误和 20 个警告；若还有更多，也会显示其数量。

### 能识别 [a.b] 这样的嵌套分区吗？

分区名称会按原样保留，因此 [a.b] 是名为 a.b 的分区，并非 a 的子分区。点号是否表示嵌套取决于具体程序。验证器只会检查名称是否非空以及标题是否闭合。

### 文件最大可有多大？可以转换吗？

输入大小最多为 5 MiB。若要将有效的 INI 文件转换为 JSON、YAML、TOML 或其他格式，请使用 Data Format Converter；它会将分区映射为对象。

在这里投放广告？

[给我们发邮件](mailto:hi@dennn.is?subject=%E5%9C%A8%20OneClick%20Pro%20%E4%B8%8A%E6%8A%95%E6%94%BE%E5%B9%BF%E5%91%8A)

[广告 适用于 WordPress 的智能体就绪型插件套件。](https://sleekwp.com/?ref=oneclickpro)
