Вы не зашли.
Главная »
PHP » как заставить php include'ить по GET переменной
#1.
koji
Off
(3)
Участник
2015.07.07 13:01
пишу
Код:
<?php |
include(ROOTPATH.'/dir/adv.php?top'); |
|
внутри adv.php проверка |
if($_GET['top']) { |
//выводим содержимое |
} |
|
if($_GET['bottom']) { |
//выводим содержимое |
} |
в результате failed to open stream: No such file or directory
прочитал за allow_url_include, но он включает по http запросу, - мне бы локально включать по переменной
Отредактировано koji (2015.07.07 16:04)
#2.
tipsun
Off
(19)
Moderator
2015.07.07 23:11
Что мешает сделать так:?
Код:
<?php |
|
$case = 'top'; |
|
include(ROOTPATH . '/dir/adv.php'); |
|
// внутри adv.php проверка |
switch ($case) { |
default: |
// content |
break; |
|
case 'top': |
// top-content |
break; |
|
case 'bottom': |
// bottom-content |
break; |
} |
#3.
koji
Off
(3)
Участник
2015.07.08 09:09
tipsun, да это вариант, который тоже подойдет, буду использовать.
Все же мне было бы интересно почему GET не срабатывает в include, может требуется что-то включить в конфиге?
хотя, видимо, так неправильно будет передавать, скорее нужно использовать ваш пример, ведь case идентично if в таком случае.
Отредактировано koji (2015.07.08 09:09)
Код:
<?php |
$_GET['top'] = null; |
include(ROOTPATH.'/dir/adv.php'); |
так можно
#5.
TLENS
Off
(14)
Moderator
2015.07.13 23:11
Я думаю что вариант через функцию будет правильнее в Вашем случае. Что бы никакой $case и прочего хлама не путаось в глобальной области.
Если Вам нужно передать несколько параметров например include(ROOTPATH.'/dir/adv.php?top&left&bottom&right');
Тогда делайте так:
Код:
<?php //index.php |
call_user_func(include (ROOTPATH.'/dir/adv.php'), ['top'=>'', 'left'=>'']); |
?> |
|
<?php // adv |
return function ($arg) { |
|
if (isset($arg['top'])) { |
echo 'top'; |
} |
|
if (isset($arg['left'])) { |
echo 'left'; |
} |
|
if (isset($arg['bottom'])) { |
echo 'bottom'; |
} |
|
if (isset($arg['right'])) { |
echo 'right'; |
} |
}; |
// end adv.php |
?> |
А если Вам нужно использовать только один параметр типа подгрузки страницы top тогда можно сделать через свитч
Но в таком случае правильнее всего будет использовать разные файлы типо top.php left.php right.php и так далее. Что бы в adv.php было меньше каши и в нужном кейсе подгружать нужный файл. Возможно даже можно обойтись без adv.php но вопрос я так понимаю был в том как в инклюд передать параметры. Собственно я показал пример как это делается
Код:
<?php // index.php |
$page = 'top'; |
|
$return = call_user_func(include(ROOTPATH.'/dir/adv.php'), $page); |
|
if (404 == $return) { |
// нету такого кейса |
} |
?> |
|
|
|
<?php // adv.php |
return function ($page) { |
switch ($page) { |
case 'top': |
echo 'top'; |
return 'top'; // или break; |
|
case 'left': |
echo 'left'; |
return 'left'; // или break; |
|
default: |
echo '404'; |
return 404; |
} |
}; |
// end |
|
?> |
И да лучше в нашем случае использовать include_once
Страниц: 1