我有这个PHP案例陈述
switch ($parts[count($parts) - 1]) {
case 'restaurant_pos':
include($_SERVER['DOCUMENT_ROOT'] . '/pages/restaurant_pos.php');
break;
case 'retail_pos':
include($_SERVER['DOCUMENT_ROOT'] . '/pages/retail_pos.php');
break;
.....
}
哪个效果很好,但我有很多文件(比如190),我很想知道是否有办法让这个案例陈述很多可以解决任何问题,所以我不必做190个案例。我想我可以在案件中使用condtion并且可能看看该文件是否存在,如果是,那么显示,如果没有那么可能是404页但我不确定这样做的好方法...任何想法都会有帮助很多
答案 0 :(得分:15)
您可以在数组中预定义文件名,然后使用in_array
来检查名称是否存在:
$files = array('restaurant_pos', 'retail_pos', ......);
$file = $parts[count($parts) - 1];
if (in_array($file, $files)) {
include($_SERVER['DOCUMENT_ROOT'] . "/pages/$file.php");
}
答案 1 :(得分:4)
如果不是用户输入,可以像
那样进行$include = $parts[count($parts) - 1];
if ($include) {
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/pages/'.$include.'.php')){
include $_SERVER['DOCUMENT_ROOT'] . '/pages/'.$include.'.php';
}
}
重复,如果从用户的输入填充$ include,请不要这样做!
答案 2 :(得分:2)
这是一个没有安全检查的简单实现:
$file=$_SERVER['DOCUMENT_ROOT']."/pages/".$parts[count($parts) - 1].".php";
if(file_exists($file)) include $file;
else show404();
为了使其更安全,例如您可以从$parts[count($parts) - 1]
答案 3 :(得分:2)
检查文件是否存在,然后将其包含在内。
请注意,您必须验证$page
的内容,以确保它不包含类似/../../../../
的路径,以尝试读取文件系统上的其他位置(如果这是用户输入的话)。 / p>
如果您知道,例如您的所有路径都是带下划线的字母数字,您可以这样做:
$page = $parts[count($parts)] - 1;
if (preg_match('/^[A-Z0-9_]+$/i', $page)) {
// it's okay, so include it.
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/pages/$page.php") {
include($_SERVER['DOCUMENT_ROOT'] . "/pages/$page.php");
}
}
答案 4 :(得分:1)
为什么不是这样的?
$include_file = $_SERVER['DOCUMENT_ROOT'] . '/pages/' . $parts[count($parts) - 1] . '.php';
if (file_exists( $include_file ))
{
include( $include_file );
}
答案 5 :(得分:1)
if (file_exists($path = $_SERVER['DOCUMENT_ROOT'].'/pages/'.$parts[count($parts) - 1].'.php')
{
include $path;
}
答案 6 :(得分:1)
另一种方法是检查给定文件是否确实存在于特定目录中:
$file = $_SERVER['DOCUMENT_ROOT'] . '/' . basename($parts[count($parts) - 1]) . '.php';
if (is_file($file)) include($file);