2010-07-04 92 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