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;它会将分区映射为对象。