2009-01-31 173 views
0

我有興趣提供hosted and SaaS version of my application。現在,SOers建議我map the URLs to MySQL databases。我能想到的是這樣的映射到MySQL數據庫的URL

  1. companya.mysoft.com將擁有以名稱companya *開頭的MySQL數據庫。即compana_mydb
  2. companyb.mysoft.com將擁有以名稱companyb * .i.e。,companyb_mydb
  3. 等等開頭的MySQL數據庫。

以這種方式創建新的公司帳戶和進行維護比較容易。

現在,是否可以調整所有這些設置裏面的 Apache配置文件和MySQL ini以及PHP ini文件? (我正在使用Apache,MySQL和PHP)。最好是我不會更改我的應用程序

編輯: MySQL不支持user-specified database-specific directories。改變這個問題來反映這一點。

編輯2:有人建議我編輯PHP應用程序來檢查子域並選擇正確的數據庫。但這意味着需要調整託管代碼以符合SaaS版本。 所以基本上我們會有兩個代碼版本,一個用於託管,另一個用於SaaS,這不是我想要的。如果所有事情都是通過配置文件完成的,那麼我會只有一個版本的代碼。

回答

2

如果您正確設置您的PHP應用程序(也許使用某種類型的MVC設計模式或框架),您可以在其中指定數據庫名稱,以供該請求中所有後續的mysql函數使用。這只是檢查請求頭文件,獲取(並驗證)公司/數據庫名稱前綴並在mysql_select_db函數中使用它的問題。

+0

謝謝,但這意味着需要調整託管代碼以符合SaaS版本。所以基本上我們會有兩個代碼版本,一個用於託管,另一個用於SaaS,這不是我想要的。 – Graviton 2009-01-31 04:16:01

1

爲什麼你需要在INI文件中做到這一點?我只想讓你的PHP數據庫類首先解析$ _SERVER ['SERVER_NAME'](或其他相同的東西)來找出你所在的子域,然後從那裏選擇相應的數據庫。

如果你正在爲數據庫函數使用PDO或mysqli(你應該是),你必須在構造函數調用中指定db名稱,這樣你纔可以在創建該對象之前進行檢查。

2

您無法創建PHP的數據庫連接以使用Apache的配置。數據庫連接必須從PHP代碼中創建,它可以執行諸如檢查標題(請求使用的域)之類的事情,或者檢查您創建的配置文件,並指定您是在運行SaaS還是託管版本。