2009-01-31 176 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还是托管版本。