В 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, если текстовый файл существует?
UPDATE:
Также убедитесь, что вы правильно проверили значение, полученное из $_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
, вы перенаправляете на домашнюю страницу.