Я пробовал:Как вы определяете PHP include как строку?
$test = include 'test.php';
Но это просто включен файл обычно
Я пробовал:Как вы определяете PHP include как строку?
$test = include 'test.php';
Но это просто включен файл обычно
Вы хотите посмотреть на функции буферизации вывода.
//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;
РЕДАКТИРОВАТЬ:
Как Джереми указывает, выходные буферы стека. Поэтому теоретически вы можете просто сделать что-то вроде:
<?PHP
function return_output($file){
ob_start();
include $file;
return ob_get_clean();
}
$content = return_output('some/file.php');
Это должно быть эквивалентно моему более подробному оригинальному решению.
Но я не потрудился проверить это.
Почему необходимо останавливать существующие буферы? Выходные буферы в стеке PHP: http://php.net/ob_start –
Это не так: я просто не заметил стекируемость. Редактирование моего ответа. – timdev
Пробег: file_get_contents()
.
Эта функция аналогична
file()
, за исключением того, чтоfile_get_contents()
возвращает файл в виде строки.
Определенно лучший ответ здесь. Короткий. Умная. –
Try что-то вроде:
ob_start();
include('test.php');
$content = ob_get_clean();
Вы можете использовать функцию file_get_contents
.
Интересно, почему вы предлагаете выходную буферизацию, когда это намного проще. –
Возможно, потому что file_get_contents не выполняет PHP-код в файле? – fool4jesus
Решение # 1: использование Make заголовочных (работает как функция): [Мой лучшее решение] index.php
Файл: included.php
<?php
$bar = 'BAR';
$php_file = include 'included.php';
print $php_file;
?>
Файл:
<?php
$foo = 'FOO';
return $foo.' '.$bar;
?>
<p>test HTML</p>
Это будет выводить FOO BAR
, но Примечание: Работа s как функции, так 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():
индексных файлов. php:
<?php
$bar = 'BAR';
$test_file = eval(file_get_contents('included.php'));
print $test_file;
?>
included.php
Файл:
$foo = 'FOO';
print $foo.' '.$bar;
Это будет выводить FOO BAR
, но Примечание: Include.php не должны иметь <?php
открытие и закрытие тегов, как вы работаете через Eval()
Единственная причина, по которой буфер будет выводить дважды, - это если буфер не был удержан, а затем очищен до конца файла, что означает, что буфер автоматически будет эхом. Возможно, это проблема, с которой вы столкнулись. – worldofjr
Aah, спасибо @worldofjr, вы не были действительно конкретны, но указали мне в правильном направлении на OB; 'ob_get_contents()' должен быть 'ob_get_clean()' иначе он выдает два раза. Ответ редактируется соответствующим образом. – Duncanmoo
другие ответы по неизвестным мне причинам не вполне соответствуют правильному решению.
Я предлагаю использовать буфер, но вы должны получить содержимое, а затем очистить буфер до конца страницы, иначе он будет выведен. Если вы хотите использовать вывод из включенного файла, вы должны использовать op_get_contents()
, который вернет строку содержимого буфера.
Вам также не нужно зацикливать на включения, поскольку каждый будет просто добавлять в буфер (если вы не очистите его в первую очередь).
Таким образом, вы можете использовать следующее:
ob_start();
include_once('test.php');
include_once('test2.php');
$contents = ob_get_contents();
ob_end_clean();
Надеюсь, это поможет.
Можете ли вы быть более подробным? –
Чего вы хотите достичь? Что содержимое test.php хранится в $ test? – Boldewyn