English 中文(简体)
我如何在同一服务器上操作多个网站,这些服务器的代码基础相同。
原标题:How do I run multiple websites on the same server with the same code base in PHP?
  • 时间:2010-09-27 16:12:22
  •  标签:
  • php
  • admin

我建立了一套习俗、专门的客户关系管理系统,有多个客户,每个客户都有自己的域名、网站、行政区和数据库,但都居住在同一个服务器上。

每当我找一个新客户时,我就简单地照抄了所有代码,将3条线换成一个组合文件,然后将其所有风格/数据从数据库中取出,或从从自己的行政区域上上载到服务器。

right right?

早在我最近决定更新所有客户点时,这就成了一场重大痛苦。 显然,我必须修改每台安装的代码。 对一项重大更新而言,这是很不错的,但对于经常的拖拉机等,重复上载的努力变得非常令人厌恶。 我希望有数十名或数以百计的客户,因此,该法最终必须集中起来,以便在一个地方加以修改,在任何地方加以更新。

最佳回答

一种容易的解决办法是将源代码放在一个子行中,但档案除外,这些档案应当为每个客户改动(例如,汇辑)。

然后,你可以把这一来源的代码放在某个地方,并且只是与它建立良好的联系。

例如,你的名录结构可能像:

/var/www/src/index.php
/var/www/src/more_source.php
/var/www/clients/client_a/settings.php
/var/www/clients/client_a/src -> ../../src/
/var/www/clients/client_b/settings.php
/var/www/clients/client_b/src -> ../../src/

如果你选择这种结构,你需要改变的唯一事情就是环境。 php(例如,从require“dings.php> to require"./dings.php>

问题回答

个人而言,我有一个数据库的用户表,拥有目前版本的代码。 当用户登录时,它安装了一个称为“密码仪”的 co,显示该客户的代码(例如“v5-09-00”)。 在阿帕奇群岛,我有:

RewriteEngine on

RewriteCond %{HTTP_COOKIE} CodeVersion=([^;]+) [NC]
RewriteRule ^(.*)$ http://v%1.%{HTTP_HOST}/${escape:$1} [R=302,P,L]

在地方接待处档案中,我有:

127.0.0.1    myservername       myservername.myserverdomain.com

127.0.0.1    v5-08-00.myservername  v5-08-00.myservername.myserverdomain.com
127.0.0.1    v5-09-00.myservername  v5-09-00.myservername.myserverdomain.com
127.0.0.1    v5-10-00.myservername  v5-10-00.myservername.myserverdomain.com

处理阿帕奇内部的当地向外派问题

The vhosts file set the environment for each edition of the Code:

<VirtualHost *:80>
    ServerAdmin mark.baker@myserverdomain.com
    DocumentRoot /usr/local/apache/htdocs_5-09-00
    ServerName v5-09-00.myservername.myserverdomain.com
    ServerAlias v5-09-00.myservername
    ErrorLog logs/myservername-error_log_5-09-00
    CustomLog logs/myservername-access_log_5-09-00 common
    php_value include_path ".:/php/includes:/usr/local/include/5-09-00/API:/usr/local/include/5-09-00/library:/usr/local/include/5-09-00/businesslogic:/usr/local/include/5-09-00/configuration:/usr/local/include/5-09-00/library/PHPExcel/Classes"
</VirtualHost>

<Directory "/usr/local/apache/htdocs_5-09-00">
    Options Indexes FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

在每一组名录中,我都有与共同守则有关的象征联系,以及针对客户的具体代码或组合的实际的php/ini文档。

让我知道,我前面有这个问题。 如果你决定通过这种方式加以没收,便很容易被一些原教旨主义的骗局或向其他客户开放。

www.un.org/Depts/DGACM/index_spanish.htm 我建议保持客户之间的一切差别。

因此,给他们自己的财务、数据库和编码数据库。 捐给它一刀,思想组合将有所帮助。 这样做似乎带有性别色彩,但如果你有一点问题,那么你在所有客户所在地都存在同样的问题,但如果你对客户有一个问题,而且所有事情都分开,那么其他客户则不一定会感觉到这一点。

您可以在单独的测试服务器上操作主代码基,以便进行更新,然后简单地把客户FTP文档和数据库发送。

但让它简单而单独!

页: 1 (每个用户的三个线,可能包括数据库链接等)。

Split the library out to a universal place eg /home/library (in *nix) and provide 改为属其他用户账户。

现在每个网站都有一个<代码>config文档,其中首先包括library<>/code>,第二套是具体网站的栏目。 更新<代码>图书馆,更新所有版本。 但告诫说——你希望进行一些单位测试,以便更新<代码>library。 不要打断单一地点的任何人。

<>m>egconfig: (每个网站一个)

<?php
require_once( /home/library/include.php );
//Line 1 config
//Line 2 config
//Line 3 config
?>

如果贵国的法典图书馆也被用于使内容(指数.php等)成为内容,那么你有两种选择:(1) 在每个网站的网页夹和<代码>library<>/code>来源之间创建<>symlinks,或者(2)将你的代码分离为核心功能和编码。

连接点在驱动力的两点之间(例如点子)建立了系统联系。 适当建立的联系使您能够以不同名称查阅一个文件夹,从而可以创建<代码>/home/user1/library,/home/user2/library>。 (这些数据不是复印件)。

下面是第2号,尽管它花了更多的工作。 您的<代码>library的确做了工作,但提供场地的却是按每个现场提供的第二部代码(例如,包括上文提及的<代码>config),这就使得能够按地点在某个地点增加灵活性(即使你没有预见到需要这样做)。 作为副作用,你重新采用了多层次的申请。

另一种做法是使用 st。 简言之,将共享的法典,如图书馆变成共享名录。 之后,每个网站都制作空文,仅包括共同编码:

  // file: index.php
  include(".../shared/index.php");

你不得不重复每个申请入境点的情况。 因此,每个地点都有几乎空洞的文字,共同编码基础的所有变化都自动适用于所有装置。 简言之,各装置之间存在差异。

静态档案(im、 c等) 我也采用一种连接方法或重新制定规则。

当我做这样的事情时,我在网络服务器上有每个客户的夹子是特别志愿人员协会的一份工作副本(我显然将特别志愿人员网用作我的版本控制系统)。 然后,当我做了一些更新、测试和贴上了释放的标签时,我就把客户翻开到新的释放点。 SVN自动撤销对我的所有改动。 有一个告诫:确保你建立网站服务器,不让每个名录(如果是,也可以是你们选择的VCS)提供文件夹的内容。 我认为,我首先在官方的“SVN docs”中阅读了这一技术,因此,我认为它受到其开发商的认可,但现在我无法在《笔录》中找到这一提法。

如果你将你的代码置于版本控制之下,那么每个客户网站可以单独进行核对。 你可以检查你们的变动,并通过进行版本控制更新(或利用出口)来将变化输入每个客户(或试验场)。 然后,你可以随时更新和测试每个客户,以确保配送适当应用。

首先,你需要仔细研究不同地点之间分享守则的陷阱。 更新许多网站,一度增加了你更新造成问题的危险——如果共同守则有点,那么在一个地点发现比100个网站更可取!

部署管理办法可能优于直接分享守则。 (如果你重新使用博士,例如,你可以利用Aegir管理你所有现场部署和更新)

尽管如此,在某些情况下分享守则是有益的。 在先前的工作中,我也做了类似的事情,他们在那里利用单一共同的法典基础,希望几个地点。 我们所做的是,把共享图书馆放在服务器上,然后每个网站都与这个夹子有象征性的联系,因此,它把它当作一个地方夹。 非常容易去做,很容易管理。

How about something that uses the same code, but each has own mysql.
Like, http://mycms.com/myuser/ brings the prefix myuser_ to the tables, thus, allowing 1 src structure, and multiple site. You will need .htaccess though





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签