在 URL 中,您将参数命名为 p,但在您的 files.class.php 中,您实际测试的是 $_GET['page']。因此,要么将 URL 更改为使用 page 作为参数,要么将代码更改为:
// in files.class.php instead of if(!isset($_GET['page']))
if(!isset($_GET['p'])){
// your code here...
} else {
// ...
}
在您的原始代码中,由于$_GET['page'] 不存在,它始终显示索引页面。
对我来说,另一件看起来很奇怪的事情是以下(但也许这只是你设置它的方式):
if(file_exists($_GET['page'].'.txt')){
// and lets include that then:
ob_start();
include("contents/". $_GET['page'] . '.php');
$content = ob_get_contents();
ob_end_clean();
}
您首先检查文本文件是否例如about.txt 存在,但包含一个 PHP 文件 contents/about.php。这是故意的吗?如果文本文件存在,PHP是否一直存在?
更新:
还要确保正确检查从 $_GET['page'] 获得的值,或者最终以任何方式调用它。
例如。这个电话http://designed.sytes.net/index.php?page=../index 似乎要杀死你的服务器(对不起,这是无意的:()
更新 2:
为了提供“某些”安全性,您可以检查 $_GET['page'] 是否是预定义值之一,而不是检查具有此名称的文件是否存在。例如:
$valid_pages = array('home', 'about', 'services', 'contact');
if(isset($_GET['page']) && in_array($_GET['page'], $valid_pages) {
// include page here
}
else {
// redirect to home page
}
这确保$_GET['page'] 不是像../index 这样的相对路径形式。如果它不是 $valid_pages 中的这些值之一,则重定向到主页。