settings.php

multi-site 要如何共用 user 帳號密碼

multi-site 共用同一個 mysql 的話, 例如:
site1:

<?php
//settings.php:
$db_url = 'mysql://root@127.0.0.1/site1';
$db_prefix = array(
       
'default' => '',
       
'users' => 'shared_',
       
'sessions' => 'shared_'
);
?>

site2:

<?php
//settings.php:
$db_url = 'mysql://root@127.0.0.1/site2';
$db_prefix = array(
       
'default' => '',
       
'users' => 'site1.shared_',
       
'sessions' => 'site1.shared_'
);
?>

如何善用 settings.php 幫助 deployment, 區分 dev, live 伺服器

Live 和 Dev (開發) 的伺服器雖然說是應該完全一樣 (無論數據庫還是代碼上)
但始終都需要區分它們
例如使用不同的數據庫連接, site name 變數不一樣等等
令 deployment 的時需要多花些功夫
例如使用 svn branch 分開兩份 settings.php
但方便的程度便不及我以下介紹的這個方法了

編程概念很簡單
利用 dev 伺服器使用 dev.example.com, 而live 使用 www.example.com 作區分
php 中的 <?php $SERVER['HTTP_HOST'] ?>便可以得出 domain name
settings 中便可以:

<?php
if ($_SERVER['HTTP_HOST']=='dev.example.com') {
 
$db_url = 'mysql://root@localhost/dev_db';
} elseif (
$_SERVER['HTTP_HOST']=='www.example.com') {
 
$db_url = 'mysql://root@localhost/live_db';
}
?>

更可以配合使用 $conf 變數方便其他地方使用, 例:

<?php
$conf
['env'] = 'dev';
$conf['site_name'] = 'Development server';
?>