2012-03-29 136 views
1

我目前正在一個頁面上工作,我正在設置區域(標題,背景顏色,標籤,說明和更多)。如何存儲設置

所以我可以在我的管理面板上快速編輯它們。

目前我正在考慮名稱爲value的表格,並在我包含的(每個頁面上)頭文件中調用它。

現在,如果有一天我得到更多用戶的話,我除了這將basicly做的大部分時間日齡數據的查詢(標題等設置不改變日常)

所以我想到這個問題。

  • 我就很少更改設置(月最大值)

  • 也許調用一個函數fetchsettings()每當我提出我的管理面板更改一些設置誰basicly刪除窗體的的設置內容PHP文件並粘貼到一個數組新設置(數組名=>值

我爲什麼會做這樣的事情:

我一個在PHP世界安靜新的,但我聽說設置和變量可以緩存,這將阻止每次訪問的查詢,並只做每次我在我的管理面板上編輯的東西查詢。

歡呼聲,

sarro

+0

你是唯一能夠改變設置的人嗎?這些設置是否應該打印?他們是什麼樣的設置?他們是否與腳本有關? – Shoe 2012-03-29 16:00:36

+0

這些設置只能由1-3人(管理界面上的管理員)編輯。他們應該設置爲一般視圖和網站上的數據(標題,關鍵字,描述等) – keslol 2012-03-29 17:08:22

回答

1

寫陣列,以這種方式文件是從性能的角度的好方法。包含數組的文件可以通過操作碼緩存進行緩存,這比從每個請求的表中讀取設置更合適。該文件應該存儲在文檔根目錄之外,或者至少以某種方式保護。

UPDATE由於您沒有操作碼緩存,因此使用PHP數組似乎毫無意義,而我只是將存儲的數據序列化到文件中。這是一個簡單的單例配置類,您可以將其用作起點。如果文件不存在,您可以完全刪除將配置存儲在數據庫中,或修改構造函數以從數據庫讀取配置數據。

<?php 

class Config { 

    private static $instance; 
    private $changes = false; 
    private $config; 
    private $file = './config.dat'; 

    private function __construct() { 
     $this->config = unserialize(file_get_contents($this->file)); 
    } 

    public static function getInstance() { 
     if (!self::$instance) { 
      self::$instance = new Config(); 
     } 
     return self::$instance; 
    } 

    public function __set($name, $value) { 
     $this->config[$name] = $value; 
     $this->changes = true; 
    } 

    public function __get($name) { 
     if (array_key_exists($name, $this->config)) { 
      return $this->config[$name]; 
     } 
     return null; 
    } 

    public function __toString() { 
     return print_r($this->config, true); 
    } 

    private function saveChanges() { 
     file_put_contents($this->file, serialize($this->config)); 
    } 

    public function __destruct() { 
     if ($this->changes) { 
      $this->saveChanges(); 
     } 
    } 

} 

$config = Config::getInstance(); 
print $config; 
+0

該文件不包含任何訪問數據(數據庫連接設置保存硬編碼,並將在未來的一個月也)將東西像[F](htaccess)鎖定用戶,但會讓腳本可以被服務器使用? – keslol 2012-03-29 16:21:45

+0

你使用操作碼緩存嗎?如果是這樣,哪一個?你有memcache嗎?這些關於您的環境的細節是提出最有效解決方案的關鍵。什麼是您的主機堆棧 - LAMP,WAMP,WIMP或其他? – nnichols 2012-03-29 22:38:37

+0

託管堆棧應該是LAMP和atm我只使用htacces緩存爲映像和css文件設置最大緩存時間 – keslol 2012-03-31 07:55:48

1

您可以將設置存儲在ini文件中。易於直觀地顯示爲人類,易於在PHP parse_ini_file中閱讀。

樣品:

[environment] 
maintenance=false 

[database] 
dsn="mysql://localhost/test" 
username="username" 
password="password" 

編輯: 我有Nnichols同意,你當然應該存儲文檔根目錄以外的文件的,所以它是從網絡不可訪問(你不」你想讓任何人閱讀你的數據庫設置,是嗎?)。

此外,請參閱this SO question關於從管理面板寫入它。

+0

現在的問題是包括一個生成PHP文件與fetchsettings()函數或包含.ini文件並使用parse_ini_file解析它。我知道它只有0.xx秒的差距,甚至更少,但第一種方法會不會更快? – keslol 2012-03-29 16:27:23