PHPEye开源社区 » Zend Framework 使用讨论 » 多站点公用zf的问题
《Programming PHP》第二版上市
2008-1-5 15:50 dcboy
多站点公用zf的问题

最近发现了一个问题
就是怎样能多个站点 用一个zf

我的目录规划是这样的
\
  app\
      models\
            --这个目录放一些数据库操作表的类
      modules\
             [url]www.a.com[/url]\
                         default\
                               controllers\
                                        IndexController.php
             [url]www.b.com[/url]\
                        default\
                                controllers\
                                        IndexController.php
  library\
      Zend\

  www\
       [url]www.a.com[/url]\
       [url]www.b.com[/url]\


在服务器上的apache分别设置了虚拟主机
分别设置了目录和域名
[url]www.a.com[/url] 指向 \www\[url]www.a.com[/url]\
[url]www.b.com[/url] 指向 \www\[url]www.b.com[/url]\

a.com下面的index.php设置如下
[php]
<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Asia/Shanghai');

//目录分隔符号
$ds = DIRECTORY_SEPARATOR;
//路径分隔符号
$ps = PATH_SEPARATOR;
$ABS_ROOT_PATH = realpath(dirname(__FILE__));
$REL_ROOT_PATH =  substr($_SERVER['PHP_SELF'], 0 , strpos($_SERVER['PHP_SELF'],'/index.php'));

set_include_path('.'.PATH_SEPARATOR.'../../library'
        .PATH_SEPARATOR.'../../app/models/'
        .PATH_SEPARATOR.get_include_path());

require('Zend/Loader.php');

//自动加载类
function __autoload($class){
        Zend_Loader::autoload($class);
}

//数据库配置
$dbParams = new Zend_Config_Ini('../../config/database.ini','SysDB');
$db = Zend_Db::factory($dbParams->adapter,$dbParams->toArray());
//$db->query("set names {$dbParams->charset};");
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('db',$db);


//SMARTY配置
$smartyParams = new Zend_Config_Ini('../../config/smarty.ini', 'Smarty');
$smarty = new Custom_View_Smarty($smartyParams->toArray());
Zend_Registry::set('smarty',$smarty);

//全局定义
$sysinfoParams = new Zend_Config_Ini('../../config/global.ini','SysInfo');
Zend_Registry::set('sysinfo',$sysinfoParams->toArray());

//初始控制器
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory(array(
      'default' => '../../app/modules/www.a.com/default/controllers'
));



$frontController->addModuleDirectory('../../app/modules');
$frontController->setParam('noViewRenderer',true);
$frontController->setBaseUrl($REL_ROOT_PATH);

try{
        $frontController->dispatch();
}catch(Zend_Controller_Dispatcher_Exception $e){
        $frontController->getResponse()->setHttpResponseCode(404);
        $frontController->getResponse()->__toString();
}

unset($db);
unset($smarty);
?>
[/php]

b.com的index.php如下
[php]
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Asia/Shanghai');

//目录分隔符号
$ds = DIRECTORY_SEPARATOR;
//路径分隔符号
$ps = PATH_SEPARATOR;
$ABS_ROOT_PATH = realpath(dirname(__FILE__));
$REL_ROOT_PATH =  substr($_SERVER['PHP_SELF'], 0 , strpos($_SERVER['PHP_SELF'],'/index.php'));

set_include_path('.'.PATH_SEPARATOR.'../../library'
        .PATH_SEPARATOR.'../../app/models/'
        .PATH_SEPARATOR.get_include_path());

require('Zend/Loader.php');

//自动加载类
function __autoload($class){
        Zend_Loader::autoload($class);
}

//数据库配置
$dbParams = new Zend_Config_Ini('../../config/database.ini','SysDB');
$db = Zend_Db::factory($dbParams->adapter,$dbParams->toArray());
//$db->query("set names {$dbParams->charset};");
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('db',$db);


//SMARTY配置
$smartyParams = new Zend_Config_Ini('../../config/smarty.ini', 'Smarty');
$smarty = new Custom_View_Smarty($smartyParams->toArray());
Zend_Registry::set('smarty',$smarty);

//全局定义
$sysinfoParams = new Zend_Config_Ini('../../config/global.ini','SysInfo');
Zend_Registry::set('sysinfo',$sysinfoParams->toArray());

//初始控制器
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setControllerDirectory(array(
      'default' => '../../app/modules/www.b.com/default/controllers'
));



$frontController->addModuleDirectory('../../app/modules');
$frontController->setParam('noViewRenderer',true);
$frontController->setBaseUrl($REL_ROOT_PATH);

try{
        $frontController->dispatch();
}catch(Zend_Controller_Dispatcher_Exception $e){
        $frontController->getResponse()->setHttpResponseCode(404);
        $frontController->getResponse()->__toString();
}

unset($db);
unset($smarty);

[/php]


问题是无论访问a.com还是b.com他们的indexAction都是同一个,我想不同的域名指向不同的控制器,请问怎么解决啊谢谢
我的QQ 242772
msn:dcboy@live.com

2008-1-14 22:05 Cykit
没必要,徒增复杂度,多拷贝一份ZF就行了,又占用不了多少空间。

似乎官方也是这么建议的,还是我在别的地方看到的。忘了。

页: [1]
查看完整版本: 多站点公用zf的问题


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.