[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Если не существует такого GET параметра
Страницы: 1, 2
Dno
Здравствуйте.

Динамически получаю контент
$id = empty($_GET['id']) ? 'main' : $_GET['id'];

т.е. если глобальная переменная GET->id пуста, присвой переменной $id значение main, иначе, если не пусто, то переменной $id присвой то, что пришло в глобальную переменную GET->id

Ну и собственно код вывода в index.php
include $id.'.php';


На сервере есть файлы php для вывода (main.php, contact.php и т.д).

Но если передать глобальной переменной значение, несуществующего файла то выводиться ошибка:

Warning: include(sdasdasd.php): in /home/httpd/vhosts/.........../index.php
Warning: include(): Failed opening 'sdasdasd.php' for inclusion (include_path='......../index.php on line 100500....


Пока что подавил ошибку собакой. Как грамотно решить данную проблему? Добавить фильтр разрешенных значений для GET? Если да то как реализовать это?

Спасибо.
AllesKlar
В твоем случае использовать функцию empty можно только для ситуаций, когда имя файла не состоит из одного нуля 0.php
http://de2.php.net/manual/ru/function.empty.php
// $_GET['id'] == '0';
empty($_GET['id']) === true


передача в URL одних пробелов также вызовет ошибку логики
// $_GET['id'] == '    ';
empty($_GET['id']) === false


Для проверки строки лучше использовать isset()
if( isset($_GET['id']) && trim($_GET['id']) != '' )
{
$filename = trim($_GE['id']) . 'php';
}
else
{
$filename = '404.php';
}


Далее проверяем на существование файла и подключаем
if( file_exists ( $filename ) )
{
include $filename;
}
else
{
include '404.php';
}


Помимо этого, неплохо было бы иметь список разрешенных к подключению файлов или путей, ведь include может подключить любой файл, даже за пределами DOCUMENT_ROOT
Ведь GET['id'] может быть и равен '../../../config'

Или же твои подключаемые файлы должны иметь некую часть в именах, которой нет у других файлов.
main.inc.php
contact.inc.php
и тогда
  $filename = trim($_GE['id']) . '.inc.php';


_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.