我看到一些网站(例如):
如果你想查看你的消息框,那么它是:example.com/file.php?action=pm
,如果你想再次发送消息,地址和文件是相同的,但$_GET
是不同的:{{1 }}
它是如何运作的?
只是:
example.com/file.php?action=sendpm
而不是拥有文件:pm.php,send.php ......?或者机制不同?
我看到SMF使用这种机制,我也看到了类似于facebook.com/?ref=something的内容。
它是如何运作的?
答案 0 :(得分:6)
最简单的方法是:
$action = isset($_GET['action']) ? $_GET['action'] : 'default';
if(!in_array($action, array('list', 'of', 'allowed', 'pages')))
$action = 'default';
include($action . '.php');
请注意,验证步骤非常重要。未正确验证该值会导致用户能够读取脚本可以访问能够执行任意代码的用户的任何文件的恶劣安全漏洞。
将所有代码放在您问题中建议的单个文件中是一个坏主意,因为它会导致无法读取的代码。特别是在将PHP和HTML混合在同一个文件中时,如建议的问题(提示:使用模板引擎!)。
答案 1 :(得分:1)
这称为路由,允许在单个应用程序中使用单个入口点到多个函数。
请求被处理,处理并路由到校正功能。此路由模式非常适合用于组织代码的模型视图控制器(MVC)模式。
看一下Zend Framework如何描述MVC和路由: http://framework.zend.com/manual/en/learning.quickstart.intro.html#learning.quickstart.intro.mvc
答案 2 :(得分:0)
你可以有一个switch语句。例如
example.com/file.php?action=pm or example.com/file.php?action=sendpm
if (isset($_REQUEST['action'])) {
$param = $_REQUEST['action'];
switch($param) {
case "pm":
// Code goes here
break;
case "sendpm":
// Do something here
break;
default:
// handle the default case
break;
}
} else {
// Handle it here
}
那么还有其他方法可以做到!! Switch是最简单的方法之一!!