如何根据文件位置使用不同的数据库


How to use different database depending on file location

我不知道该怎么做。但总的来说,当有人访问我们的脚本时:-http://livescript.phpiscool.com或任何子文件夹

数据库应该是正常的"实时"数据库。

但当有人试图进入/导航时:-http://livescript.phpiscool.com/beta1或-http://livescript.phpiscool.com/beta2

脚本应该使用不同的数据库("测试版"数据库)。。。

我们在config.php中有数据库配置,它看起来像这样:

<?php
$db_host = "localhost";
$db_username = "tureh_user";
$db_password = "crazypssrd";
$db_name = "database_test";
?>

$_SERVER['REQUEST_URI']将包含从域后的第一个斜杠开始的所有内容,因此从位置0开始用'/beta'检查它应该可以完成的工作

if(strpos(strtolower($_SERVER['REQUEST_URI']),'/beta') === 0)
{
  $db_host = "beta";
}
else
{
  $db_host = "localhost";
}

显式比较(==)表示int为0,而不是(==

大多数时候,这种问题由配置数组处理:

$db['live'] = array(); // Your live configuration
$db['beta'] = array(); // Your beta configuration
$mode = process_url_to_get_mode();

然后,使用$db[$mode]来实例化您的连接。CodeIgniter就是这么做的。

当然,您可以依靠Scuzzy给您的函数来获得$mode

一个更干净的解决方案是维护代码库的两个副本,一个用于测试版,另一个用于实时版本。如果您使用诸如subversion之类的源代码管理,则这是微不足道的,subversion使用的概念类似于名为"分支"的文件夹(维基百科关于subversion的文章:http://en.wikipedia.org/wiki/Subversion)。拥有两份测试版和实时版代码的好处是:;

  • 如果你在开发过程中对网站的BETA版本进行了更改,意外破坏了网站,则直播网站不会受到影响
  • 随着网站的增长,您可以将BETA或开发副本移到另一台机器上,或者在某个时候将其移到本地机器上进行开发
  • 您不会为了查看您是否正在运行开发/实时版而在代码中进行恶意检查

如果您使用的是Apache Web服务器,您可以托管这两个独立的站点,以便使用Apache VHosts同时运行(假设您自己控制服务器);http://httpd.apache.org/docs/2.0/vhosts/examples.html

从长远来看,这是更好的解决方案。