单个代码库,用于单个站点的多个版本

时间:2013-08-29 08:15:41

标签: php mysql database .htaccess templates

我希望我能正确地标出这个问题,我试着解释一下我们想要实现的目标。

我们使用文件和目录模板构建了一个白标web应用程序。

我们将此网站授权给可以通过CSS在其系统版本上拥有徽标和自定义颜色样式的客户。该网站对每个客户的工作方式完全相同。

每个站点/客户都有自己的数据库和php配置文件来确定他们的数据库名称和次要信息(地址,联系信息等)。

我们已经有大约12位客户,但我们发现的问题是我们必须为每位客户复制所有文件和目录 - 在进行小型更新时非常困难,我们必须上传新网站12次。 / p>

要在工作中添加另一个扳手,我们使用自己的URL为每个客户设置并使用htaccess将其定向到我们的目录。

那么......有没有办法为所有12个客户使用一个版本的Web应用程序文件和目录,但是如果他们访问www.customer1.com我们可以加载一个configuration.php文件和logo / css和www.customer2.com等相同?

它们都使用相同的模板文件,但URL确定要加载的配置文件。

如果不清楚我很抱歉,如果是的话我会尝试进一步详细说明。

由于

2 个答案:

答案 0 :(得分:0)

有一些可能的解决方案。

第一个解决方案:

我会使用所有网站都使用的共享目录,并且只在每个用户文件夹中保留配置文件。

然后,新自定义的部署脚本将为除自定义文件之外的所有内容创建符号链接。您可能需要重构一些代码才能执行此操作,而无需在部署脚本中编写数百个符号链接。

<强>优点:

  • 每个用户都有一个单独的目录,只有用户自定义的代码位
  • 每个客户的自定义很简单,因为您可以打破符号链接,复制代码并对其进行修改

<强>缺点:

  • 分散式自定义检查

第二个解决方案:

将所有用户路由到使用相同的代码库,并根据URL(例如customer1.mysite.com)设置一些配置变量。使您的网站根据该变量加载整个用户配置。

<强>优点:

  • 现有代码库几乎没有变化(取决于代码的编写方式)
  • 所有客户定制检查的集中位置。

<强>缺点:

  • 用户的自定义代码难以编写/维护

<强>参考文献:

答案 1 :(得分:0)

有一个很好的示例,说明如何在此网站上获取用户在php中请求的URL:http://www.phpro.org/examples/Get-Domain-Name-From-URL.html

<?php

function getDomain($url)
{
    if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED) === FALSE)
    {
        return false;
    }
    /*** get the url parts ***/
    $parts = parse_url($url);
    /*** return the host domain ***/
    return $parts['scheme'].'://'.$parts['host'];
}
?>

然后,您可以查看他们选择的网站,如下所示:

<?php
    //this next line from: http://stackoverflow.com/questions/6768793/php-get-the-full-url
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    if (getDomain($url) = "customer1.com"){
        //Load config for customer 1
        //Perhaps also store this in some flag for loading custom css later.
    }
    if (getDomain($url) = "customer2.com"){
        //Load config for customer 2
        //etc...
    }

?>

然而,可能有更好的方法,因为这需要为每个客户添加另一个if语句。