Php include только переменных

Passing a variable from one php include file to another: global vs. not

I’m trying to pass a variable from one include file to another. This is NOT working unless I declare the variable as global in the second include file. However, I do NOT need to declare it as global in the file that is calling the first include. For example: front.inc:

include('front.inc'); echo $name; include('end.inc'); 

output: nothing IF I declare global $name prior to echoing $name in end.inc, then it works properly. The accepted answer to this post explains that this depends on your server configuration: Passing variables in PHP from one file to another I’m using an Apache server. How would I configure it so that declaring $name to be global is not necessary? Are there advantages/disadvantages to one vs. the other?

includes are not like functions. includes do not break the variable scope. it’s as if you copy pasted the include files contents directly into the calling script.

that would break the variable scope. and in that case you should probably pass $name to the function in an argument.

the echo in end.inc is not inside a function. Assume that the three files I described above contain no more and no less than exactly what I wrote.

5 Answers 5

The parent file has access to variables in both included files

When including files in PHP, it acts like the code exists within the file they are being included from. Imagine copy and pasting the code from within each of your included files directly into your index.php . That is how PHP works with includes.

So, in your example, since you’ve set a variable called $name in your front.inc file, and then included both front.inc and end.inc in your index.php , you will be able to echo the variable $name anywhere after the include of front.inc within your index.php . Again, PHP processes your index.php as if the code from the two files you are including are part of the file.

The included file doesn’t have access to the other included file

When you place an echo within an included file, to a variable that is not defined within itself, you’re not going to get a result because it is treated separately then any other included file.

In other words, to do the behavior you’re expecting, you will need to define it as a global.

Источник

include

Выражение include включает и выполняет указанный файл.

Читайте также:  Python install pypi package

Документация ниже также относится к выражению 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 include pear file

Версии 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’ ;
>

// сработает
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’ );

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 .

Замечание: Поскольку это языковая конструкция, а не функция, она не может вызываться при помощи переменных функций.

Источник

require/include into variable

It might be, but I think you might want to ask yourself (or us, if needed) why you would need this, and if there isn’t another way. You could do all sorts of things (like executing it using exec or php yourfile.php and then retrieving the results), but there might be better ways to actually fix your initial problem.

it just happends to be handy in my situation. There will likely be a better way but I’ve got yet to learn it. For now even just knowing about the possibility is enough since it does expand my knowledge.

9 Answers 9

If your included file returned a variable.

include.php

. then you can assign it to a variable like so.

Otherwise, use output buffering.

ob_start(); include 'include.php'; $buffer = ob_get_clean(); 

Using return in the included file is simple after assigning the value of inclusion into variable, this is the best solution for me!

I’ve also had this issue once, try something like

Wrong! ob_start() enables turns on output buffering, ob_clean() — just cleans the buffer and leaves output buffering turned on, which is wrong! To turn it off, use ob_end_clean() instead of ob_clean() . Alternatively, you can use ob_get_clean() instead of both ob_get_contents() and ob_end_clean() . So the body of a function would look like ob_start(); require $file; return ob_get_clean(); .

Also good to know: ob_start is stackable, so this method is perfectly safe to use within code that was already inside an buffered output block.

But what if i am trying to still access a variable? Lets say test.php would have super complex algorithms that require a lot of calculations. I need the content of this file in my var like shown, but also want to access the variables, that are created within my test.php. That means, that first I have to execute your requireToVar($ifle) and then also include the file like normal, which results in doubled execution of my code.

Источник

Оцените статью