2011-09-20 62 views
2

如果我想要做類似這樣的事情,最好的方法是什麼;Php頁面調用

我稱它爲頁面調用。

我有將運行的config.php

的index.php文件,我想有的index.php作爲我的核心,然後像做

index.php?customer=home or index.php?customer=viewaccount 

index.php?admin=home or index.php?admin=updateproduct 

然後調用特殊的PHP文件,例如。 home.php,viewaccount.php

問候 我真的很感謝你的幫助。=)

+0

嗯..這是相當過時。現在你使用'/ customer/viewaccount'這樣的東西。如果這是你的問題,你最好檢查一個MVC框架。 –

+0

你是指通過GET變量重定向?我不太明白你想達到什麼目的。代碼片段真的取決於你想實現的目標。你將不得不提供更多關於你真正想要做什麼的數據。 – maialithar

+0

[PHP前端控制器]的可能重複(http://stackoverflow.com/questions/4053285/php-frontcontroller) – JohnP

回答

2

聽起來好像你正在談論一種被稱爲Front Controller Pattern的設計模式。

當然可以實現自己的前端控制器,但幾乎所有的PHP框架都已具備此功能。我建議你嘗試Zend Framework。

0

最好是檢查$_GET參數與允許腳本名稱的「白名單」陣列。之後,您可以包含該文件。

if (in_array($_GET['admin'], array('home', 'updateproduct'))) { 
    include($_GET['admin'] . '.php'); 
} 
1

我不會在同一個腳本中混用admin和puclic區域。
所以,對於公共區域,你可以這樣做

<? 
if (empty($_SERVER['QUERY_STRING'])) { 
    $name="index"; 
} else { 
    $name=basename($_SERVER['QUERY_STRING']); 
} 
$file="pages/$name.htm"; 
if (is_readable($file)) { 
    include($file); 
} else { 
    header("HTTP/1.0 404 Not Found"); 
    readfile("404.html"); 
} 
?> 

,然後滿足客戶的網頁這樣index.php?homeindex.php?viewaccount

+1

在編寫這樣的代碼時,請注意遠程/本地文件包含漏洞。 index.php?page =/etc/passwd或index.php?page = www.myEvilScript.com/evil.php – DarkMantis

+0

你注意到了basename()函數的用法嗎? –

+0

哦對不起,我其實並沒有看到它^ _ ^但我想我仍然知道 – DarkMantis

0

好吧,我不能打擾評論所有的答案在這裏,所以我會對你說,即使這篇文章可能會被取消,因爲它不是一個直接的幫助。

包含來自POST或GET請求的文件時,您需要非常小心。編寫這樣的代碼時,請注意遠程/本地文件包含漏洞。 index.php?page =/etc/passwd或index.php?page = www.myEvilScript.com/evil.php

很多人都可以通過這種方式進行黑客攻擊,而且您不希望這種情況發生在您身上。

總是清理你的數據,所以stripslashes($ _ GET ['admin']);或任何你想使用的方法。

+1

我很好奇,什麼是stripslashes($ _ GET ['admin'])爲? –

+0

它會從URL中刪除任何斜線,所以如果你有index.php?admin =/MyInclude.php或者它會去掉斜槓。 – DarkMantis

+0

這個函數實際上只剝去反斜槓 –

0

此模式的名稱是前端控制器。

您可以在網絡服務器上實現多路複用(例如使用mod_rewrite)或在您的PHP代碼中。

下面是如何做到這一點:

<?php 

require_once($_REQUEST['customer']); 
require_once($_REQUEST['admin']); 

C.