我使用以下作为Frontpage/Page Controller(s)并且目前工作正常,除了两个我正面临的问题,您可以看到$ pages数组和开关,它们是实际上我在这里粘贴的时间要长得多。每次都需要一个新的页面控制器,我必须将它添加到$ pages数组中,并切换使列表很长的列表。你如何克服这个问题,你看到这个代码有任何其他的改进? loadLogic()
在页面控制器中它用于获取pages/controllername/logic/function.php下的函数。PHP首页/页面控制器
头版控制器 - 的index.php:
include 'common/common.php';
if(!isset($_GET['p']) OR $_GET['p'] == ''){
$_GET['p'] = 'home';
header('Location: index.php?p=home');
}
$pages = array('home','register','login','logout','page1','page2','page3');
$_GET['p'] = trim($_GET['p']);
if(isset($_GET['p'])){
if(in_array($_GET['p'], $pages)){
switch ($_GET['p']) {
case 'home':
include 'home.php';
break;
case 'register':
include 'register.php';
break;
case 'login':
include 'login.php';
break;
case 'logout':
include 'logout.php';
break;
case 'page1':
include 'page1.php';
break;
case 'page2':
include 'page2.php';
break;
case 'page3':
include 'page3.php';
break;
}
}else{
echo '404!';
}
}
页控制器 - {家,注册,登录,注销,第1页,第2页,第3页} .PHP:
include 'tpl/common/header.php';
contentStart();
if(isset($_SESSION['logged'])){
loadLogic('dashboard');
}else{
loadLogic('nologin');
}
//Display login form in logic page instead links
//
if(!isset($_SESSION['logged'])){
contentEnd();
loadLogic('nologinForm');
}else{
contentEnd();
include'tpl/common/rcol.php';
}
include 'tpl/common/footer.php';
功能loadLogic() :
function loadLogic($logic) {
$path = dirname(__DIR__) . '/pages';
$controller = preg_split('/&/',$_SERVER['QUERY_STRING']);
$controller = trim($controller[0],"p=");
$logicPath = 'logic';
$logic = $logic . '.php';
$err = 0;
$logicFullPath = $path.'/'.$controller.'/'.$logicPath.'/'.$logic;
if($err == '0'){
include "$logicFullPath";
}
}
文件夹结构:
projectName
|
---> common
|
---> pages
| |
| --->home
| |
| --->register
| |
| --->login
| |
| --->logout
| |
| --->page1
| |
| --->page2
| |
| --->page3
|
---> tpl
| |
| ---> common
|
--> home.php
|
--> register.php
|
--> login.php
|
--> logout.php
|
--> page1.php
|
--> page2.php
|
--> page3.php
@Phoenix谢谢对于你的建议到目前为止,还有什么其他的你可以告诉我有关FrontPage /页面控制器的一般情况吗?有小费吗?我会再等一两个小时,如果这个问题没有更多的答案,我会将你的标记标记为已接受。 – afarazit 2011-01-05 05:28:38
那么,你可能会考虑查找如何执行.htaccess重写规则,以便当用户转到?p = pageone时,它将显示为/ pageone。您也可以使用与首页控制器相同的逻辑来控制子页面的子页面。我有一个类似的系统,只有一个文本文件库,并且?p = library只会去一个书籍索引,并且?p = library&lib = book1会去找这本书。图书馆页面具有图书索引,因为它是默认包含,并且使用file_exists()检查了$ _GET ['lib']与指定目录中的txt文件并将其包含在其中,或者在默认情况下检查了它。 – Phoenix 2011-01-05 05:40:20
另外,另一种形式的混淆正在改变扩展。包含的文件可以字面上有任何扩展名,可以是home.gobbledygook。包括几乎包括所有相同,如果它发现内部的PHP代码,它会运行它。您可以将.php重命名为.jpg,它将运行代码。只要确保apache或任何你使用的服务器将它视为一个php文件,如果直接请求的话,或者不允许从服务器外部访问,否则如果有人猜到了这个名字和扩展名,这个源代码将是可下载的,但是即使你没有,它仍然会运行。 – Phoenix 2011-01-05 05:51:39