Как вы определяете включение PHP как строку? - PullRequest
21 голосов
/ 27 января 2010

Я пытался:

$test = include 'test.php';

Но это просто включенный файл обычно

Ответы [ 6 ]

30 голосов
/ 28 января 2010

Вы захотите взглянуть на функции буферизации вывода.

//get anything that's in the output buffer, and empty the buffer
$oldContent = ob_get_clean();

//start buffering again
ob_start();

//include file, capturing output into the output buffer
include "test.php";

//get current output buffer (output from test.php)
$myContent = ob_get_clean();

//start output buffering again.
ob_start();

//put the old contents of the output buffer back
echo $oldContent;

EDIT:

Как указывает Джереми, стек выходных буферов. Таким образом, теоретически вы можете просто сделать что-то вроде:

<?PHP
function return_output($file){
    ob_start();
    include $file;
    return ob_get_clean();
}
$content = return_output('some/file.php');

Это должно быть эквивалентно моему более подробному исходному решению.

Но я не удосужился проверить это.

10 голосов
/ 28 января 2010

Попробуйте что-то вроде:

ob_start();
include('test.php');
$content = ob_get_clean();
8 голосов
/ 28 января 2010

Попробуйте file_get_contents().

Эта функция аналогична file(), за исключением того, что file_get_contents() возвращает файл в виде строки.

5 голосов
/ 18 августа 2013

Решение № 1: Использование функции include (работает как функция): [Мое лучшее решение]

Файл index.php:

<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>

Файл включен .php:

<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>

Это выдаст FOO BAR, но Примечание : работает как функция, поэтому RETURN передает содержимое обратно в переменную (<p>test HTML</p> будет потеряно в приведенном выше)


Решение № 2: op_buffer ():

Файл index.php:

<?php
$bar = 'BAR';
ob_start();
include 'included.php';

$test_file = ob_get_clean(); //note on ob_get_contents below
print $test_file;
?>

Файл включен .php:

<?php
$foo = 'FOO';
print $foo.' '.$bar;
?>
<p>test HTML</p>

Если вы используете ob_get_contents(), он выдаст FOO BAR<p>test HTML</p> ДВАЖДЫ , убедитесь, что вы используете ob_get_clean()


Решение № 3: file_get_contents ():

Файл index.php:

<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));

print $test_file;
?>

Файл включен .php:

$foo = 'FOO';
print $foo.' '.$bar;

Это выдаст FOO BAR, но Примечание : Include.php не должен иметь <?php открывающих и закрывающих тегов, так как вы запускаете его через eval ()

0 голосов
/ 25 сентября 2014

Другие ответы, по неизвестным мне причинам, не дошли до правильного решения.

Я предлагаю использовать буфер, но вы должны получить содержимое, а затем очистить буфер до конца страницы, в противном случае он выводится. Если вы хотите использовать вывод из включенного файла, вы должны использовать op_get_contents(), который будет возвращать строку содержимого буфера.

Вам также не нужно зацикливаться на включениях, так как каждый из них просто добавит в буфер (если вы не очистите его сначала).

Поэтому вы можете использовать следующее:

ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();

Надеюсь, это поможет.

0 голосов
/ 28 января 2010

Вы можете использовать функцию file_get_contents.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...