2010-07-04 78 views
0

其中包括最好的练习方法,为什么?动态包含方法

$page = $_GET['page']; 

方法1

$pages = array('home', 'blog', 'about'); 
if(in_array($page, $pages)) 
{ 
    include($page.'.php'); 
{ 
else 
{ 
    die('Nice Try.'); 
} 

方法2级

if($page = 'home'){ 
include('home.php'); 
}else if($page = 'blog'){ 
include('blog.php'); 
}else if($page = 'about'){ 
include('about.php'); 
} 

方法3

if(str_replace("http://", "gth://", $page) == $page){ 
include_once $page; 
}else{ 
     die('Nice Try.'); 
} 

或任何其他的解决方案?我不喜欢方法1和2,因为每当我添加一个新页面时,它总是需要更新。

+0

我会用方法1。你只需要更新每个新页面的数组。 – casablanca 2010-07-04 16:34:00

+0

如果您关心安全性并希望能够轻松维护它,请使用第一种方法。你多久添加一个新页面? – 2010-07-04 16:35:01

+0

这里的问题是我有很多页面,包括另一个PHP文件。例如games.php?page = arcade,comments.php?page = 101,profile.php?page = edit等等。 – kornesh 2010-07-04 16:43:30

回答

2

我相信第一个是最好的地段。你可以尝试第二个,但它是为新生。而第三个是BIG NO,因为任何新鲜黑客可以破解你的“如果”条件,&更多的漏洞将开始在蠕动。

至于你的问题,上添加新页面的阵列,每创建一个新页面,对于第一种方法,我有一个解决方案: -
假设您将所有新页面放在一个文件夹“abc”中。现在,只写一个文件的代码,如下,读取所有现有文件夹中的文件/页面: -

<?php 
$page = $_GET['page']; 
$pages = array(); 
/** 
* If you are using all the pages existing in the current folder you are in, 
* then use the below variable as:- 
* $path = "."; 
*/ 
$path = 'abc/'; // Change the Path here, related to this Folder name 
$handle = opendir($path); 
while (($file = readdir($handle)) !== false) { 
    $pages[] = $file; 
} 
closedir($handle); 

if(in_array($page, $pages)) { 
    include($page.'.php'); 
} 
else { 
    die('Nice Try.'); 
} 
?> 

所以你看到阵列是越来越动态填充,而不需要提及的所有网页你每一次创造。而且您只使用第一种方法。并将包含页面保存在一个单独的文件夹中,每次需要将其包含在其他主页面中。

希望它有帮助。

+0

哇,好主意!但不会导致任何性能问题,每次检查文件夹? – kornesh 2010-07-04 17:01:33

+1

@Exoot - 如果您的项目是中小型项目,则不会出现问题。但是,如果你正在做一些SNS项目(宁/ Facebook口径,或者一些非常大的房地产项目),那么它可能会有点担心。不过它不应该让你陷入麻烦。 – 2010-07-04 17:18:08

3

延伸/维护第一种方式最简单,第二种方式更糟糕。第三种方式是没有办法的,因为它依赖用户输入来要求页面...这将是一个安全漏洞

+0

但是它从包含的内容中删除外部页面。所以我认为它的保存,除非它们以某种方式将恶意的php上传到服务器。 – kornesh 2010-07-04 16:46:21