2011-07-13 73 views
1

如何在PHP應用程序中提供全局信息(路徑,數據庫密碼,時區等)?我知道,全局變量是不安全的,但常見的CMS如何處理這個問題呢?我已經看過Wordpress,但WP並不以其高安全性標準而出名。在php應用程序中提供全局信息(安全方式)

我讀了一點關於依賴注入的內容,但是這是處理這個問題的常用方法嗎?

總而言之,我想提供一種全局(但控制*)的信息。

*是否可以通過只有授權對象才能獲得所需信息的方式來控制提供的數據?

+0

這是PHP的全球信息......即使你用適當的對象封裝私人信息,這些東西仍然會列在文件的某個地方,並且可以很容易地解析出來,而不需要實際執行相關的PHP代碼。 –

+0

重複........ – dynamic

+0

@ yes123:^^無用的評論是無用的。提供一個鏈接和/或投票來結束問題並參考相關答案。 –

回答

1

依賴注入與安全無關。這是一種設計模式,是一種以結構良好的方式解決常見問題的策略。

我通常會準備一個類CSettings,它提供所有類型的信息的方法,但都是以通用方式通過方法。

然後,當在特定的應用程序中使用時,我將CSettings以這種方式分類,以便它返回特定應用程序的正確/具體值。

促進信息的另一種方式可以是例如註冊表模式。

-1

在這方面有許多學派。最基本的實現可能是一個全局配置文件,使用define()

我曾經與使用這種方法廣泛,再加上單身的數據庫訪問和域設置的框架集工作常量。它仍然被廣泛使用,但通常更深入的依賴注入,其中配置的定義被製作成類特定的,現在被認爲更現代且可重用,因爲單個包包含使其在同一文件中工作的所有定義。

http://misko.hevery.com/2009/01/14/when-to-use-dependency-injection/

這是關於依賴注入的細點一個偉大的文章。關鍵要記住的是,對象應該只是實例化或交出其他對象,如果它們在當前範圍內直接需要的話。作者深入細節。

還有很多像HTMLPurifier這樣的更着名的庫,它們使用一個配置對象,在創建對象實例的構造函數時將其傳遞給它。如果你的對象具有高度複雜和嵌套的配置,這是一個好方法。

+0

我不想使用定義,因爲在更大的項目中很容易忽略我們的配置。因此,我使用xml或ini文件來存儲處理信息的信息和對象。現在我正在尋找一種有效的方式在我的項目實例之間傳遞信息。 – NaN

2

您可以使用配置文件(.ini),使用這個PHP函數parse_ini_file很容易。

您可以使用它像:

的config.ini

[global-information] 

path : your_path 
DB_passwords : your_password 
Timezone : your_timezone 

在你的PHP文件,你可以得到這樣的

$ini_array= parse_ini_file("config.ini",true); 

$path = $ini_array['global-information']['path']; 
+0

我正在尋找一種方法來處理和傳遞對象/文件等(傳播數據)之間的變量,而不是如何存儲它們。 – NaN

+0

@NaN你可以結合配置文件和註冊表設計模式 – chafank