0

ページ内にさまざまな要素を設定するフロントコントローラーがあります。しかし、おそらくいくつかの要素が正しい順序になっていないことに気づきました。これが意味するのは、一部の要素は他の要素の前に使用/宣言する必要があるかもしれないということです。

または、別の言い方をすれば、ファイルを最良/正しい方法で構造化したか。たとえば、session_start()は'ini_set()の後に'来る必要があります。

ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid', 0);

$mytimeout = 720 * 60; // (12hrs*60m=720) // minutes * 60
session_set_cookie_params($mytimeout);

$sessdir = "../application/data"; 
ini_set('session.save_path', $sessdir);

session_cache_expire($mytimeout / 60);
ini_set('session.gc_maxlifetime', $mytimeout);

session_start();

error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);

require_once('../application/models/front.php');
require_once('../application/models/icontroller.php');
require_once('../application/models/view.php');
require_once('../application/models/db.php');
require_once('../application/models/sconfig.php');
require_once('../application/models/acl.php');

require_once('../application/controllers/index.php');
require_once('../application/controllers/user.php');
require_once('../application/controllers/error.php');
require_once('../application/controllers/blog.php');
require_once('../application/controllers/about.php');

function exception_handler($exception) {
  echo "Sorry something went wrong; And or we couldnt find what you requested.<br />We suggest you go back to our <a href=\"/\">home page</a> and try again.<br />We have logged this request in order to provide a better service.<br /> *** ". $exception->getMessage()." ***";

}

set_exception_handler('exception_handler');

$fc = FrontController::getInstance();
$c=$fc->getController();
$a=$fc->getAction();

$users=ACL::getInstance();
$sid=session_id();

if(isset($_SESSION['HTTP_USER_AGENT'])){
  if($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])){
    session_regenerate_id(TRUE);
    $_SESSION=array();
    $users->removeUser($sid);
    if(($c!='error')&&($a!='badsession')){
      $fc->redirect("error/badsession");
    }
  }
}
else{
  $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
}   

$dbh=DBConnection::getInstance();

setcookie('ct', 1,0,"/");

$config = Configuration::getInstance();
$cf=array();
$cf=$config->getall();

$users=ACL::getInstance();
$users->addUser();
$users->removeOld();

$front = FrontController::getInstance();

$front->route();
echo $front->getBody();
4

1 に答える 1

1

物事の順序は少し調整できます。これは私が選んだ順序です:

  1. まず第一に、私はerror_reporting電話を一番上に置くので、すべてが期待どおりにエラーを報告します。
  2. 次に、すべてをキャッチできるように設定exception_handlerします。exception_handler
  3. すべてのini_set通話を行います。
  4. require必要なすべてのスクリプト。
  5. でセッションを開始しsession_startます。上記のすべてがうまくいった場合。
  6. 他のロジックを実行します。

ノート

シングルトンを使用するのはあまり良い考えではありません。特にあなたがそれらを使用するボリュームで。なぜそれがシングルトンの何がそんなに悪いのですか? シングルトンの使用を学習しない方がよいでしょう。シングルトンはコード設計に無頓着で、申し訳ありません。それはあなたの例に示されています:-)

于 2013-03-16T10:32:43.033 に答える