<?php
⁄**
* Configクラスはウェブアプリケーションが一番基本的なレベルで動くのに
* 必要な基本設定情報を保持します。
*
* 追記:このクラスはSingletonデザインパターンで実装されています。
*
* @author Darryl Patterson
* @copyright Euro RSCG 4D
*
*⁄
class Config {
var $sessionName;
var $sessionKeyName;
var $sessionTimeout;
var $sessionMaxAge;
var $cookieTimeout;
var $dbconn;
var $sessionDatabaseName;
var $applicationRoot;
var $defaultModule;
var $defaultAction;
var $language;
var $environmentClassName;
var $frontController;
var $failedAuthenticationRedirect;
function Config()
{
// 設定ファイルから情報を読み込む
$configArray = $this->loadConfigInfo();
// アプリケーションルートを読み込む
if (isset($configArray['applicationRoot'])){
$this->applicationRoot =
$configArray['applicationRoot'];
} else {
echo "Config::Config(): "
. "applicationRoot is undefined.";
exit();
}
// デフォルトモジュールを読み込む
if (isset($configArray['defaultModule'])){
$this->defaultModule =
$configArray['defaultModule'];
} else {
$this->defaultModule = 'Default';
}
// デフォルトアクションを読み込む
if (isset($configArray['defaultAction'])){
$this->defaultAction =
$configArray['defaultAction'];
} else {
$this->defaultAction = 'defaultAction';
}
// セッション名を読み込む
if (isset($configArray['sessionName'])){
$this->sessionName =
$configArray['sessionName'];
} else {
$this->sessionName = 'sessionId';
}
// セッションキーを読み込む
if (isset($configArray['sessionKeyName'])){
$this->sessionKeyName =
$configArray['sessionKeyName'];
} else {
$this->sessionKeyName = 'sessionKey';
}
// セッションタイムアウト時間を読み込む
if (isset($configArray['sessionTimeout'])){
$this->sessionTimeout =
$configArray['sessionTimeout'];
} else {
$this->sessionTimeout = '600';
}
// セッション最大生存時間を読み込む
if (isset($configArray['sessionMaxAge'])){
$this->sessionMaxAge =
$configArray['sessionMaxAge'];
} else {
$this->sessionMaxAge = '3600';
}
// cookieタイムアウト時間を読み込む
if (isset($configArray['cookieTimeout'])){
$this->cookieTimeout =
$configArray['cookieTimeout'];
} else {
$this->cookieTimeout = '129600';
}
// 言語を読み込む
if (isset($configArray['language'])){
$this->language = $configArray['language'];
} else {
$this->language = 'en';
}
// environmentクラス名を読み込む
if (isset($configArray['environmentClassName'])){
$this->environmentClassName =
$configArray['environmentClassName'];
} else {
$this->environmentClassName = 'Environment';
}
// フロントコントローラ名を読み込む
if (isset($configArray['frontController'])){
$this->frontController =
$configArray['frontController'];
} else {
$this->frontController = 'app';
}
// 認証失敗時のリダイレクトURLを読み込む
if (isset(
$configArray['failedAuthenticationRedirect'])){
$this->failedAuthenticationRedirect =
$configArray['failedAuthenticationRedirect'];
} else {
$this->failedAuthenticationRedirect =
'/'.$this->frontController.'/Default';
}
// デフォルトのデータベース接続情報
$dbuser = 'guest';
$dbpass = '';
$dbname = 'common';
$dbhost = 'localhost';
$dbtype = 'mysql';
if (isset($configArray['dbuser'])){
$dbuser = $configArray['dbuser'];
}
if (isset($configArray['dbpass'])){
$dbpass = $configArray['dbpass'];
}
if (isset($configArray['dbname'])){
$dbname = $configArray['dbname'];
}
if (isset($configArray['dbhost'])){
$dbhost = $configArray['dbhost'];
}
if (isset($configArray['dbtype'])){
$dbtype = $configArray['dbtype'];
}
$this->dbconn = mysql_connect($dbhost, $dbuser,
$dbpass);
mysql_select_db($dbname, $this->dbconn);
}
⁄**
* スタティック関数が呼ばれていることになります。
* Config::instance()
*
* @return Config
* @access public
* @static
*⁄
function &instance()
{
if (is_a($GLOBALS['__configInstance__'],
'Config')) {
return $GLOBALS['__configInstance__'];
}
if (isset($_SERVER['configClassName'])) {
$classFilename = 'class-'.
$_SERVER['configClassName'].'.php';
⁄**
* 開発者がアプリケーション特有のConfigクラスを 定義しているか確認。
* フレームワークのConfigクラスのサブクラスである必要あり。
* 見つからなければ、フレームワークの Configクラスインスタンスを作成。
*⁄
if (@fopen($classFilename,'r',true)) {
require_once($classFilename);
$GLOBALS['__configInstance__'] =
new $_SERVER['configClassName']();
} else {
$GLOBALS['__configInstance__'] =
new Config();
}
} else {
die('Config::instance(): configClassName '
. 'not set in Apache config.');
}
return $GLOBALS['__configInstance__'];
}
// アクセサメソッド
function getSessionName()
{
return $this->sessionName;
}
function getSessionKeyName()
{
return $this->sessionKeyName;
}
function getSessionTimeout()
{
return $this->sessionTimeout;
}
function getSessionMaxAge()
{
return $this->sessionMaxAge;
}
function getCookieTimeout()
{
return $this->cookieTimeout;
}
function getEnvironmentClassName()
{
return $this->environmentClassName;
}
function getDBConnection()
{
return $this->dbconn;
}
⁄**
* 設定ファイルから設定情報を読み込む。
* 設定ファイルのパスはApacheの設定を使用
* SetEnv configFilePath /path/to/config/directory/
*
* @return array
* @access private
*⁄
function loadConfigInfo()
{
$configArray = array();
$configFilePath = $_SERVER['configFilePath'] .
$_SERVER['HTTP_HOST'] . '.config';
$configLines = file($configFilePath);
if ($configLines === false){
echo 'Error loading Config info.';
exit;
}
foreach($configLines as $line){
if (trim($line) == '' ||
substr($line, 0, 1) == '#'){
continue;
}
list($key, $val) = explode('=', $line); $configArray[trim($key)] = trim($val);
}
return $configArray;
}
}
?>
|
|