Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php INI解析和必需字段的验证_Php_Validation_Ini - Fatal编程技术网

Php INI解析和必需字段的验证

Php INI解析和必需字段的验证,php,validation,ini,Php,Validation,Ini,我有一个相当大的INI,我解析并验证它,以确保所有必需的设置都已设置。如果我需要添加/删除INI设置,这是一个巨大的痛苦 在我的PHP脚本中,我使用如下内容: $ini = parse_ini_file($this->ini_filename, true); // Debug Settings if(isset($ini['debug_settings']['debug'])) { $this->debug = $ini['debug_settings']['debug']

我有一个相当大的INI,我解析并验证它,以确保所有必需的设置都已设置。如果我需要添加/删除INI设置,这是一个巨大的痛苦

在我的PHP脚本中,我使用如下内容:

$ini = parse_ini_file($this->ini_filename, true);

// Debug Settings
if(isset($ini['debug_settings']['debug'])) {
    $this->debug = $ini['debug_settings']['debug'];   
} else {
    $this->failedINIValidation("['debug_settings']['debug'] not configured in the INI file: ");
}
FailedInvalidation()向我发送一封包含缺少INI字段/值/等的电子邮件


想让它更通用,有什么想法吗?

只是把它作为一个想法扔掉,已经很晚了,我也很累了,但是一个定义好的数组,包含要检查的结构,运行一个
数组_diff
,然后循环结果(如果有)调用
FailedInvalidation

然后,如果要添加或删除INI文件中所需的任何内容,只需从数组中删除该项即可


除非您的INI文件非常复杂,否则我不会担心开销。我运行了一些快速而肮脏的基准测试来验证我在其他地方看到的声明:使用
parse_ini_file
比包含一个包含本机
数组
对象的配置文件要快。

使用一个有效的配置文件来进行比较就足够了。我的建议是不要使用ini。。。使用XML,生成XSD,并通过模式使用验证。。。让libxml为您完成这项工作。。然后您只需要更改模式和XML配置。例如:现在您必须编写一些专门的代码,为libxml生成的错误提供更多的上下文,但我认为这可能是非常通用的,因为您可以访问原始错误信息,并可以将其抽象为您的特殊错误类型/消息,这些错误类型/消息应该或多或少保持不变。使验证更容易是可以理解的,但我仍然必须对setter/getter有一些逻辑,除非我遗漏了什么?什么二传手/接球手?我认为这是一个简单的验证器,不是一个可以直接使用的完整配置对象。。。基本上,您只需验证XML。。。然后,将该xml转换为一个数组,以便在实际应用程序中使用(或封装在配置对象中的数组)。。。当然,您可以直接使用XML文档并使用xpath从中提取值,但这似乎有些过分。验证器和配置对象应该彼此分开。如果您需要将xml转换为数组以供一般使用的示例逻辑,请查看
Zend_Config_xml
的代码。我以前使用过这一点,但它似乎比ini文件的开销更大:这就是为什么我要转换为数组。。。然后你只需要解析和转换的开销,然后你就可以处理一个普通数组了。我会忽略解析转换时的开销,特别是因为我会在磁盘上缓存阵列的序列化版本。这样,您只需对配置文件进行解析和转换即可。我想说,每次添加或删除配置值时修改应用程序代码是公平的。