Php5 не работает динамический include - что не так?

Glomen

Новичок
Php5 не работает динамический include - что не так?

PHP:
<?php
switch ($page) {                                            
 case "new":
	include("site/menu.txt");
break;
default:
	include("site/def.txt");
}
?>
Ссылки вида
PHP:
<a href="index.php?page=new">Новость №2</a>
При нажатии на ссылку include
PHP:
 case "new"
не происходит
хотя в адресной строке отображается
PHP:
www.site.ru/index.php?page=new
На сервере PHP5 ,подскажите что тут не так?
 

Glomen

Новичок
register_globals = Off

если это дело в этом, то както не очень охота его on делать =(
 

HraKK

Мудак
Команда форума
Что за переменая $page?
http://www.php.net/manual/en/reserved.variables.php
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Glomen
если это дело в этом, то както не очень охота его on делать =(
И не нужно. Нужно общаться с переменными через глобальные массивы.

Влом/нет времени переписывать?
-- По ссылке в коментах куча решений.
[m]register_globals[/m]
 

Glomen

Новичок
Автор оригинала: HraKK
Что за переменая $page?
http://www.php.net/manual/en/reserved.variables.php
Переменная $page назначается автоматически исходя из значения динамического адреса вашего сайта (file.php?page=$page). К примеру, если у Вас есть адрес index.php?page=news, то, в данном случае, переменной $page будет присвоено слово "news".
 

DeadLy

Новичок
Glomen
ещё раз перечитай мануал и ответы на твой вопрос
 

Wicked

Новичок
Вообще, неплохо бы для начала тебе научиться дебажить: http://phpfaq.ru/debug
А то, боюсь, конструктивный диалог у нас врядли получится.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
К примеру, если у Вас есть адрес index.php?page=news, то, в данном случае, переменной $page будет присвоено слово "news".
Не совсем правильно.
при ОФФ
не $page
а $_GET['page'] = 'news'
 

Glomen

Новичок
Почитал , поучился и получилось вот
заработало так
PHP:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);         //ну ошибки эт несчитаем

$page=$_GET['page'];  // при off    $_GET['page'] = 'news'  у меня не пошло, ошибка и все

switch ($page) {                                            
    case "new":
	include("site/menu.txt");
        break;
    default:
	include("site/def.txt");

}
?>
теперь тока вылезает ошибка при загрузке default:
PHP:
	include("site/def.txt");


Undefined index: page in  index.php on line 11

 line 11    -      $page=$_GET['page'];
 

Glomen

Новичок
я думаю, вместо этого кода тебе стоит взять код отсюда:
http://phpfaq.ru/easy
Да прикольно мне понравилось, хотя я и с тем немного разобрался уже.

Только вопрос не опасно ли это? пользователь не сможет какнить выудить другой файл , а не только то которые в каталоге txt (ну на примере примера =)), там подставив ?about../../file или чтонить в этом духе
 

Wicked

Новичок
Glomen
в твоем примере - нет, т.к. выбор идет между двумя файлами с фиксированными именами.
В случае с http://phpfaq.ru/easy , там об этом заботится [m]basename[/m](), так что выбор злоумышленника ограничен только файлами одной директории, так что единственное ограничение: в той директории не должно быть чувствительных данных.
 

Фанат

oncle terrible
Команда форума
Glomen
а ты попробуй подставить =)

-~{}~ 20.06.07 14:06:

отличие примера по ссылке в том, что добавив текст на сайт, не нужно будет обновлять case. а только ссылку в меню доавить.
а можно, кстати, сделать так, чтобы пхп и меню строил автоматически.
 

Glomen

Новичок
а ты попробуй подставить =)
не ну я сразу проверил, неполучилось, просто видел гдето статью , про уязвимость определения пути и чтение .passwd
там приводились примере с ?file

-~{}~ 20.06.07 14:08:

чтобы пхп и меню строил автоматически.
парсить каталог и добавлять ссылки?

-~{}~ 20.06.07 14:22:

PHP:
<?php
if (empty($_SERVER['QUERY_STRING'])) { 
  $name="main_page"; 
} else { 
  $name=basename($_SERVER['QUERY_STRING']); 
} 
$file="sourse/".$name.".php"; 
if (is_readable($file)) { 
  readfile($file); 
} else { 
  echo "<br>not file<br>"; 
} 
?>
в sourse/ лежат php файлы а в них тоже есть include вот include в этих файлах почемуто не работает =(
 
Сверху