我正在尝试创建一个简单的静态网站,但是我对后端代码的了解不足,使我怀疑自己的能力。使用数组检查而不是switch语句是否存在任何类型的安全风险或我可能要监督的其他事情?
例如,这是我直到最近才使用的代码
// Default page
$current_page = 'home';
if(array_key_exists('page', $_GET)) {
$current_page = $_GET['page'];
}
switch ($current_page) {
case 'home':
$page = 'pages/home.php';
break;
case 'about':
$page = 'pages/about.php';
break;
case 'contacts':
$page = 'pages/contacts.php';
break;
default:
$page = 'pages/404.php';
}
这是我替换为的代码。对于我来说,将将来会扩展的代码(以后将添加更多页面)与永远不会改变的实际检查分开,对我来说更有意义,最重要的是,我认为它看起来更好。
$pages = array(
'home' => 'pages/home.php',
'about' => 'pages/about.php',
'contacts' => 'pages/contacts.php',
'404' => 'pages/404.php',
);
// Default page
$page = $pages['home'];
if(array_key_exists('page', $_GET)) {
$current_page = $_GET['page'];
if(array_key_exists($current_page, $pages)){
$page = $pages[$current_page];
} else {
$page = $pages['404'];
}
}
答案 0 :(得分:0)
它们都很安全,但是第二个则更易于管理。
另一种方法是这样的:
$subFolder = 'pages';
$current_page = $subFolder . DIRECTORY_SEPARATOR . 'home';
if (array_key_exists('page', $_GET)) {
$current_page = $subFolder . DIRECTORY_SEPARATOR . $_GET['page'] . '.php';
}
if (file_exists(__DIR__ . DIRECTORY_SEPARATOR . $current_page)) {
$page = $current_page;
} else {
$page = $subFolder . DIRECTORY_SEPARATOR . '404.php';
}
echo $page;
这不需要您每次添加新页面时都编辑代码。代码本身会检查页面目录中是否存在所请求的页面。