Вы не зашли.
Главная » 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)
#4. Gemorroj Off (107)
Administrator
2015.07.10 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
Главная
WEB
PunBB Mod v0.6.2
0.013 s