передача параметров в php include / require construct
Мне интересно, есть ли способ просто передать параметр checkRole.php как часть конструкции include или require?
3 ответа
Невозможно передать параметры, которые нужно включить или потребовать.
Однако включенный код присоединяется к потоку программы в том месте, где вы его включаете, поэтому он наследует любые переменные, которые находятся в области видимости. Так, например, если вы установите $myflag = true непосредственно перед включением, ваш включенный код сможет проверить, для чего установлен $myflag.
Тем не менее, я бы не предложил использовать эту технику. Намного лучше, чтобы ваш файл include содержал функции (или класс), а не код, который запускается прямо. Если вы включили файл, содержащий функции, вы можете вызывать свои функции с любыми параметрами, которые вы хотите в любой момент вашей программы. Это гораздо более гибкий и, как правило, лучший способ программирования.
Включить с параметрами
Это то, что я использовал в своем недавнем проекте WordPress
Сделайте функцию functions.php :
function get_template_partial($name, $parameters) < // Path to templates $_dir = get_template_directory() . '/partials/'; // Unless you like writing file extensions include( $_dir . $name . '.php' ); >
Получить параметры в cards-block.php :
// $parameters is within the function scope $args = array( 'post_type' => $parameters['query'], 'posts_per_page' => 4 );
get_template_partial('cards-block', array( 'query' => 'tf_events' ));
Если вы хотите обратный вызов
Например, общее количество отображаемых сообщений:
Измените functions.php на это:
function get_template_partial($name, $parameters) < // Path to templates $_dir = get_template_directory() . '/partials/'; // Unless you like writing file extensions include( $_dir . $name . '.php' ); return $callback; >
Измените cards-block.php на следующее:
// $parameters is within the function scope $args = array( 'post_type' => $parameters['query'], 'posts_per_page' => 4 ); $callback = array( 'count' => 3 // Example );
$cardsBlock = get_template_partial('cards-block', array( 'query' => 'tf_events' )); echo 'Count: ' . $cardsBlock['count'];
include
Выражение include включает и выполняет указанный файл.
Документация ниже также относится к выражению require .
Файлы включаются исходя из пути указанного файла, или, если путь не указан, используется путь, указанный в директиве include_path. Если файл не найден в include_path, include попытается проверить директорию, в которой находится текущий включающий скрипт и текущую рабочую директорию перед тем, как выдать ошибку. Конструкция include выдаст warning, если не сможет найти файл; поведение отлично от require , который выдаст фатальную ошибку.
Если путь указан — не важно, абсолютный (начинающийся с буквы диска или с \ в Windows или с / в Unix/Linux системах) или относительно текущей директории (начинающийся с . или ..) — директива include_path будет проигнорирована в любом случае. К примеру, если начинается с ../, парсер проверит родительскую директорию на наличие запрошенного файла.
Для большей информации о том, как PHP обрабатывает включаемые файлы и включаемые пути, смотрите документацию для директивы include_path.
Когда файл включается, его код наследует ту же область видимости переменных, что и строка, на которой произошло включение. Все переменные, доступные на этой строке во включающем файле будут также доступны во включаемом файле. Однако все функции и классы, объявленные во включаемом файле, будут доступны в глобальной области видимости.
Пример #1 Простой пример include
$color = ‘green’ ;
$fruit = ‘apple’ ;
echo «A $color $fruit » ; // A green apple
Если включение происходит внутри функции включающего файла, тогда весь код, содержащийся во включаемом файле, будет вести себя так, как будто он был определен внутри этой функции. То есть, он будет в той же области видимости переменных этой функции. Исключением к этому правилу являются магические константы, которые выполняются парсером перед тем, как происходит включение.
Пример #2 Включение внутри функции
function foo ()
global $color ;
/* vars.php в той же области видимости, что и foo(), *
* поэтому $fruit НЕ доступен снаружи этой области *
* $color доступен, поскольку мы переменную глобальной */
foo (); // A green apple
echo «A $color $fruit » ; // A green
Когда файл включается, парсинг в режиме PHP кода прекращается и переключается в режим HTML в начале указанного файла и продолжается снова в конце. По этой причине любой код внутри включаемого файла, который должен быть выполнен как PHP код, должен быть заключен в верные теги начала и конца PHP кода.
Если «обертки URL include» включены в PHP, вы можете также указать файл для включения через URL (с помощью HTTP или других поддерживающихся обработчиков — смотри Поддерживаемые протоколы и обработчики (wrappers) для списка протоколов) вместо локального пути. Если целевой сервер интерпретирует указанный файл как PHP код, могут быть переданы переменные во включаемый файл с помощью строки URL-запроса, как если бы использовался метод HTTP GET. Это, строго говоря, не тоже самое, что включение файла и наследование родительской области видимости; скрипт выполняется на удаленном сервере и результат выполнения включается в локальный скрипт.
Версии PHP для Windows до PHP 4.3.0 не поддерживают возможность использования удаленных файлов этой функцией даже в том случае, если включена опция allow_url_fopen.
Пример #3 Пример include через HTTP
/* В этом примере предполагается, что www.example.com настроен на обработку .php
* файлов, но не .txt. Также, ‘Works’ обозначает, что переменные
* $foo и $bar доступны внутри включаемого файла. */
// Не сработает; file.txt не обрабатывается www.example.com как PHP
include ‘http://www.example.com/file.txt?foo=1&bar=2’ ;
// Сработает.
include ‘http://www.example.com/file.php?foo=1&bar=2’ ;
$foo = 1 ;
$bar = 2 ;
include ‘file.txt’ ; // Сработает.
include ‘file.php’ ; // Сработает.
Предупреждение безопасности
Удаленные файлы могут быть обработаны на удаленной стороне (в зависимости от расширения файла и того, что удаленный сервер выполняет скрипты PHP или нет), но это все равно должно производить валидный PHP скрипт, потому что он будет затем обработан уже на локальном сервере. Если файл с удаленного сервера должен быть обработан там и выведен его результат, предпочтительнее воспользоваться функцией readfile() В противном случае, должны быть предусмотрены дополнительные меры, чтобы обезопасить удаленный скрипт от ошибок и нежелательного кода.
Смотрите также раздел Удаленные файлы, функции fopen() и file() для дополнительной информации.
Обработка возвращаемых значений: оператор include возвращает значение FALSE при ошибке и выдает предупреждение. Успешные включения, пока это не переопределено во включаемом файле, возвращают значение 1. Возможно выполнить выражение return внутри включаемого файла, чтобы завершить процесс выполнения в этом файле и вернуться к выполнению включающего файла. Также, возможно вернуть значение из включаемых файлов. Вы можете получить значение включения как если бы вы вызвали обычную функцию. Хотя это не возможно при включении удаленного файла, только если вывод удаленного файла не содержит правильные теги начала и конца PHP кода (так же, как и локальный файл). Вы можете определить необходимые переменные внутри этих тегов и они будут представлены в том месте, где файл был включен.
Так как include — это специальная языковая конструкция, круглые скобки не обязательны для заключения аргумента. Будьте осторожны при сравнении возвращаемого значения.
Пример #4 Сравнение возвращаемого значения при include
// не сработает, интерпретируется как include((‘vars.php’) == ‘OK’), т.е. include(»)
if (include( ‘vars.php’ ) == ‘OK’ ) echo ‘OK’ ;
>
?php
// сработает
if ((include ‘vars.php’ ) == ‘OK’ ) echo ‘OK’ ;
>
?>
Пример #5 Выражения include и return
$bar имеет значение 1, т.к. включение файла произошло успешно. Заметьте разницу между примерами сверху. Первый использует return внутри включаемого файла, тогда как второй не использует. Если файл не может быть включен, возвращается FALSE и возникает E_WARNING .
Если во включаемом файле определены функции, они могут быть использованы в главном файле вне зависимости от того, были ли они объявлены до return или после. Если файл включается дважды, PHP 5 выдаст фатальную ошибку, потому что функции уже были определены, в то время как PHP 4 не обратил бы внимания на функции, определенные после return . Рекомендуется использовать include_once вместо того, чтобы проверять был ли уже файл включен ранее.
Другой путь «включить» PHP файл в переменную — это захватить вывод используя Функции контроля вывода с include. К примеру:
Пример #6 Использование буферизированного вывода для включения PHP файла в строку
$string = get_include_contents ( ‘somefile.php’ );
?php
function get_include_contents ( $filename ) if ( is_file ( $filename )) ob_start ();
include $filename ;
return ob_get_clean ();
>
return false ;
>
Для того, чтобы включать файлы автоматически в скрипты, обратите внимание на конфигурационные директивы auto_prepend_file и auto_append_file в php.ini .
Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.
Передача параметров в include
Добрый день, коллеги. Что-то туплю. Помогите пожалуйста.
в файле 1.htm имеется конструкция
как передать пармаетр param из 1.htm?param=50303010 в 1.php
в 1.php происходит обработка param
Передача параметров файлу, подключаемому через include
Как можно передать параметры в подключаемый через include файл. Т.е. есть некий файл, который.
Include (передача переменной)
Доброго всем времени суток! На хостинге Holm.ru не могу поймать переменную 🙁 На основном.
Передача перменной в/из include
В общем-то тут недавно топик подымал про загрузку файлов, начитался тут про всякую безопасность.
Ob_start(), include, и передача переменных
Добрый день. Есть объект, в который записывается содержимое файла header и текст, который будет.
if(isset($_GET['param'])) {$param = $_GET['param'];} //определяем include('1.php');
К сожалению выполнение php не разрешено в .html иначе все было бы просто (да и include я бы не делал я сразу писал код php в htm)
Во первых что значит разрешено не разрешено? ЭТО ПРОСТО НЕ ВОЗМОЖНО. Сначала переименуй .html в .php а потом делай всё что хочешь. Вот если заинклюдить .html в .php то код будет выполнятся.
Сообщение от BarbosLV
AddType application/x-httpd-php .php .phtml .htm .html
наоборот (инклудом в пхп хтмла) решение готово, но оно не устраивает уже по другим причинам
нужно решить как передать параметры — как в вопросе, переверстка страницы решит этот овпрос но создаст другие проблемы уже связанные с устройством сайта
Ну если дело в настройках сервера то я просто не знал о такой возможности. Но проще же файл переименовать.
Добавлено через 1 минуту
Сообщение от serge777
коллеги очевидно что невозможно если включен ssi обрабатывать php в коде htm, не хотел выступать в роли назидателя, так как тут моя роль ученика
давайте попробуем решить задачу именно в такой постановке, как она сформулирована
Добавлено через 6 минут
Сообщение от BarbosLV
Сообщение от serge777
Сообщение от BarbosLV
не грузится файл
в качесве эксепримена в любом пхп файле поставте первой строкой любой тег или текст корректно интерпретируемый хтмл — ваш пхп файл перестанет отображаться
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
html> head> title>ВАШ САНТЕХНИК•LV - галерея 10/title> meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> META NAME="Keywords" CONTENT= "Сантехник, установка, монтаж, на, дом, сантехники, выезд, клиенту, канализации, трубы, ремонт, замена, обвязка, котла, работы, сантехнические, смесителя, раковины, унитаза, демонтаж, штробление, сверление, берём, на, обслуживание, вызов"> LINK href="main.css" rel=stylesheet> /head> body bgcolor="#808080" background="fon.jpg" leftmargin="0" topmargin="14" marginwidth="0" marginheight="14"> table border="0" width="749" height="600" cellpadding="0" cellspacing="0"> tr> td width="749" height="562" background="Imag/f10.jpg" valign="top"> table cellpadding="0" cellspacing="0" border="0" width="749" height="562"> tr> td height="520">img src="px.gif" width="1" height="1">/td> td>img src="px.gif" width="1" height="1">/td> /tr> tr> td height="42" align="left">a href="g17.html" title="Назад">img src="lstr.gif" width="35" height="37" border="0">/a>/td> td align="right">a href="g15.html" title="Вперёд">img src="rstr.gif" width="35" height="37" border="0">/a>/td> /tr> /table>/td> tr>td>b class="mo">a href="#" onClick="parent.self.close(); return false"> Х - Закрыть окно/a>/b>/td>/tr> /tr> /table>/center> /body> /html>