2011-04-27 75 views
0

我有一個相當大的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']; 
} else { 
    $this->failedINIValidation("['debug_settings']['debug'] not configured in the INI file: "); 
} 

failedINIValidation()給我發送電子郵件丟失INI字段/值的/ etc ...

想使這個更通用, 有什麼想法嗎?

+0

我的建議是不使用INI ...使用XML,製作XSD並通過模式使用驗證...讓libxml爲您完成工作......然後您只需更改模式和XML配置。例如:http://www.php.net/manual/en/domdocument.schemavalidate.php#62032現在你必須編寫一些專門的代碼來爲libxml生成的錯誤提供更多的上下文,但我認爲這可以因爲你可以訪問原始錯誤信息並且可以從那裏將它抽象爲特定的錯誤類型/消息,這些錯誤類型應該或多或少保持不變。 – prodigitalson 2011-04-27 19:36:59

+0

可以讓驗證更容易理解,但是我仍然必須在setter/getters上有一些邏輯,除非我失去了一些東西? – 2011-04-27 20:05:41

+0

什麼setter/getters?我認爲這是一個簡單的驗證程序,而不是直接使用的完整配置對象...基本上,您只需驗證XML ...然後將該XML轉換爲數組以便在您的實際應用程序中使用(或包裝在配置對象中的數組)...你當然可以直接使用XML文檔,並用xpath將值從中拉出來,但這看起來過度。驗證器和配置對象應該彼此分離。如果您需要將xml轉換爲數組以供常規使用的示例邏輯,請查看「Zend_Config_Xml」的代碼。 – prodigitalson 2011-04-27 20:07:37

回答

1

只是拋出這個想法,它遲到了,我很累,但是如何定義包含要檢查的結構的數組,然後運行array_diff,然後遍歷結果(如果有)來調用failedINIValidation

然後,如果您想要添加或刪除INI文件中所需的任何內容,只需將該項從數組中刪除。

除非你的INI文件真的很複雜,我不會擔心費用。我運行了一些快速和骯髒的基準測試來驗證我在其他地方看到的聲明:使用parse_ini_file比包含包含本機array對象的配置文件更快。

+0

漫長而複雜,但感謝這個想法 – 2011-04-27 21:29:19

+0

使用一個有效的配置文件來比較可能就足夠了。 – 2013-02-08 15:53:36