Как разделять разделы сайта в PHP

123
Great-Antique
На сайте с 21.08.2010
Offline
16
#11

<?php

if (file_exists('/my_path/'.$_GET['part_of_site']))
include '/my_path/'.$_GET['part_of_site'];
?>

Как вариант

Пишу небольшие PHP-скрипты бесплатно. Главное, чтобы интересно было. Блог о PHP-разработке (http://den.girnyk.com) и не только.
C
На сайте с 20.05.2011
Offline
14
#12

эт плохой вариант, в $_GET['part_of_site'] может быть что-то вроди '../../../что_то_интересное'

дальше от настроек сервера. перехвата ошибок, их вывода зависит и т.д., но такая возможно имеется. для этого случая в целом подходит, только ещё "нежелательные" символы удалять ;)

Joker-jar
На сайте с 26.08.2010
Offline
154
#13
RM
На сайте с 21.06.2011
Offline
77
#14
cryptex:
если ищите именно идеологически-правильный вариант, то я бы делал именно так.

получаете имя акшина/контроллера, экранируете это имя, проверяете существование такого файла и инклюдите (если по-простому, без построения своих иерархий лоадеров, именно классических контроллеров и т.д.). Из основных плюсов: чистота кода и гибкая расширяемость для данного случая.

Для идеальности решения. нужно проверять имя запрашиваемого файла по массиву разрешенных, а то могут залить шелл и вызывать его при помощи данного способа. А на сам файл с массивом поставить самые жесткие права, чтобы вообще изменять ниче нельзя было(но чтобы при этом работало :) )!

В общем - всем спасибо за дискуссию! Вы натолкнули меня на нужную идею!

Joker-jar
На сайте с 26.08.2010
Offline
154
#15

Если залили шелл, то запустить его уже не возникает проблем. Обчыно, конструкции типа include $_GET['page'] . '.php' опасны из-за возможности, т.н. local/remote inluding. Для защиты используем мною вышеупомянутую функцию basename.

RM
На сайте с 21.06.2011
Offline
77
#16
Joker-jar:
Если залили шелл, то запустить его уже не возникает проблем. Обчыно, конструкции типа include $_GET['page'] . '.php' опасны из-за возможности, т.н. local/remote inluding. Для защиты используем мною вышеупомянутую функцию basename.

Я так и решил сделать! Вот примерный код:

<?php

$allowed_files = array('index.php', 'member.php', 'search.php', 'comments.php');
if(isset($_GET['page'])) {
$file = basename(trim($_GET['page']));
if(in_array($file, $allowed_files) AND file_exists(MODULES_DIR . $file)) include(MODULES_DIR . $file);
else die('Ошибка'); // Выдаем ошибку - нас пытаются взломать или просто запрашивают несуществующую страницу
} else {
// Тут показываем стандартную страницу(к примеру главную), если параметр page не передан
}
?>

Как-то так 🍿

V
На сайте с 05.01.2011
Offline
23
#17

ну и чем это лучше switch-a ?

RM
На сайте с 21.06.2011
Offline
77
#18
veterinar:
ну и чем это лучше switch-a ?

1. Скоростью

2. Расширяемостью(планируется для создания CMS)

3. Удобностью и читаемостью кода

V
На сайте с 05.01.2011
Offline
23
#19
RoMaN444Ik:
1. Скоростью
2. Расширяемостью(планируется для создания CMS)
3. Удобностью и читаемостью кода

1.- c какого перепугу

2 - в чем проблемма ?

3 - мне кожется со свичем намного читабельней

P
На сайте с 23.12.2011
Offline
0
#20

Cryptex судя по ответам Вы хорошо разбираетесь в стилях и div-ах, подскажите пожалуйста, у меня центральная рамка в Мазиле и Опере обнимает текст и жмёт его впарво, следовательно между рамками левой и центральной (разделами) получается не нужный отступ http://www.mainsolnce.ru/stihi-1.html , а в Explorer корректно всё. Спасибо.

123

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий