php云计算环境
“IBM、微软、Zend Technologies发起了一个开源项目Simple Cloud API,让程序员在云计算环境中运行一般的应用,和在不需要修改代码来访问云计算环境的情况下,使用PHP语言开发云计算应用程序。Zend Framework(或称Zend Cloud)将作为该PHP项目的实现。”
“IBM、微软、Zend Technologies发起了一个开源项目Simple Cloud API,让程序员在云计算环境中运行一般的应用,和在不需要修改代码来访问云计算环境的情况下,使用PHP语言开发云计算应用程序。Zend Framework(或称Zend Cloud)将作为该PHP项目的实现。”
<?php
function __autoload($className) {
require $className = str_replace(’_', ‘/’, $className) . ‘.php’;
}
class Bootstrap{
public static $frontController = null;
public static $root = ”;
public static $registry = null;
public static function run(){
self::prepare();
$response = self::$frontController->dispatch();
self::sendResponse($response);
}
public static function prepare(){
self::setupEnvironment();
self::setupRegistry();
self::setupConfiguration();
self::setupFrontController();
self::setupErrorHandler();
self::setupController();
self::setupView();
self::setupDatabase();
self::setupSessions();
self::setupTranslation();
self::setupRoutes();
self::setupAcl();
self::setupDebug();
}
public static function setupEnvironment(){
error_reporting(E_ALL ^ E_NOTICE);
ini_set(’display_errors’, true);
date_default_timezone_set(’Europe/Bucharest’);
self::$root = dirname(dirname(__FILE__));
$configType = (isset($_SERVER['SERVER_NAME']) && ($_SERVER['SERVER_NAME'] == ‘127.0.0.1′ OR $_SERVER['SERVER_NAME'] == ‘localhost’)) ? ‘development’ : ‘production’;
define(’APPLICATION_ENVIRONMENT’, $configType);
define(’HTMLPURIFIER_PREFIX’, self::$root . ‘/library’);
}
public static function setupRegistry() {
self::$registry = new Zend_Registry(array(), ArrayObject::ARRAY_AS_PROPS);
Zend_Registry::setInstance(self::$registry);
}
public static function setupConfiguration() {
$config = new Zend_Config_Ini(
self::$root . ‘/application/config/main.ini’,
APPLICATION_ENVIRONMENT
);
self::$registry->configuration = $config;
//save $siteRootDir in registry:
self::$registry->set(’siteRootDir’, self::$root );
self::$registry->set(’applicationRootDir’, self::$root . ‘/application’ );
self::$registry->set(’siteUploadDir’, self::$root . ‘/uploads’);
self::$registry->set(’siteRootUrl’, ‘http://’ . $_SERVER['HTTP_HOST'] );
self::$registry->set(’siteUploadUrl’, ‘/uploads’ );
}
public static function setupFrontController(){
self::$frontController = Zend_Controller_Front::getInstance();
self::$frontController->throwExceptions(true);
self::$frontController->returnResponse(true);
self::$frontController->addModuleDirectory(self::$root . ‘/application/modules’);
self::$frontController->setParam(’registry’, self::$registry);
self::$frontController->setParam(’env’, APPLICATION_ENVIRONMENT);
$response = new Zend_Controller_Response_Http; // Set default Content-Type
$response->setHeader(’Content-Type’, ‘text/html; charset=UTF-8′, true);
self::$frontController->setResponse($response);
}
public static function setupErrorHandler() {
self::$frontController->throwExceptions(false);
self::$frontController->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(
array(
‘module’ => ‘default’,
‘controller’ => ‘error’,
‘action’ => ‘error’)
));
$writer = new Zend_Log_Writer_Firebug();
$logger = new Zend_Log($writer);
Zend_Registry::set(’logger’,$logger);
}
public static function setupController(){
Zend_Controller_Action_HelperBroker::addHelper(new GSD_Controller_Action_Helper_AuthUsers());
Zend_Controller_Action_HelperBroker::addHelper(new GSD_Controller_Action_Helper_Breadcrumbs());
}
public static function setupView() {
$view = new Zend_View(array(’encoding’=>’UTF-8′));
$view->addHelperPath(’GSD/View/Helper’, ‘GSD_View_Helper_’);
$viewRendered = new Zend_Controller_Action_Helper_ViewRenderer($view);
Zend_Controller_Action_HelperBroker::addHelper($viewRendered);
Zend_Layout::startMvc(
array(
‘layoutPath’ => self::$root . ‘/application/layouts’,
‘layout’ => ‘default’
)
);
if (self::$frontController) {
self::$frontController->registerPlugin(new GSD_Layout_Controller_Plugin_Layout());
}
}
public static function sendResponse(Zend_Controller_Response_Http $response){
$response->sendResponse();
}
public static function setupDatabase($options = array()){
extract($options);
$config = self::$registry->configuration;
$db = Zend_Db::factory($config->db->adapter, $config->db->toArray());
$profiler = new Zend_Db_Profiler_Firebug(’All DB Queries’);
$profiler->setEnabled(true);
$db->setProfiler($profiler);
$db->query(”SET NAMES ‘utf8′”);
self::$registry->database = $db;
Zend_Db_Table::setDefaultAdapter($db);
if (!isset($dissableCache) && $dissableCache !== true) {
$frontendOptions = array(
‘automatic_serialization’ => true
);
$backendOptions = array(
‘cache_dir’ => self::$root . ‘/data/cache/db_table’
);
$cache = Zend_Cache::factory(’Core’,
‘File’,
$frontendOptions,
$backendOptions);
// Next, set the cache to be used with all table objects
Zend_Db_Table_Abstract::setDefaultMetadataCache($cache);
}
}
public static function setupSessions(){
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
}
// Now set session save handler to our custom class which saves the data in MySQL database
$sessionManager = new GSD_Session_Manager();
Zend_Session::setOptions(array(
‘gc_probability’ => 1,
‘gc_divisor’ => 5000
));
Zend_Session::setSaveHandler($sessionManager);
$defSession = new Zend_Session_Namespace(’Main’, true);
Zend_Registry::set(’defSession’, $defSession);
}
public static function setupTranslation(){
$options = array(
’scan’ => Zend_Translate::LOCALE_FILENAME,
‘disableNotices’ => true,
);
$translate = new Zend_Translate(’gettext’, Zend_Registry::get(’siteRootDir’) . ‘/application/languages/’, ‘auto’, $options);
Zend_Registry::set(’Zend_Translate’, $translate);
}
public static function setupRoutes(){
// define some routes (URLs)
$router = self::$frontController->getRouter();
$config = new Zend_Config_Ini(
self::$root . ‘/application/config/routes.ini’,
‘development’
);
$router->addConfig($config, ‘routes’);
}
public static function setupAcl(){
self::$frontController->registerPlugin(new GSD_Controller_Plugin_Acl());
}
public static function setupDebug() {
$scBar = new Scienta_Controller_Plugin_Debug(array(
‘database_adapter’ => self::$registry->database, // or array of adapters
‘memory_usage’ => TRUE, // default value shown
‘collect_view_vars’ => TRUE,
’sort_view_vars’ => TRUE,
’show_exceptions’ => TRUE,
‘handle_errors’ => FALSE
));
self::$frontController->registerPlugin($scBar);
}
}