"使用$ _GET而不是新文件"的机制是什么?

时间:2012-06-14 10:21:02

标签: php methods get

我看到一些网站(例如): 如果你想查看你的消息框,那么它是:example.com/file.php?action=pm,如果你想再次发送消息,地址和文件是相同的,但$_GET是不同的:{{1 }}

它是如何运作的?

只是:

example.com/file.php?action=sendpm

而不是拥有文件:pm.php,send.php ......?或者机制不同?

我看到SMF使用这种机制,我也看到了类似于facebook.com/?ref=something的内容。

它是如何运作的?

3 个答案:

答案 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是最简单的方法之一!!