it-swarm.com.ru

Включают PHP файл как строка

можно ли сделать что-то подобное?

// file.php
$string = require('otherfile.php');
echo $string;

// otherfile.php
<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<?php require 'body.php';?>
</body>
</html>

// body.php
<p>Lorem ipsum something</p>

И получить этот вывод?

<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<p>Lorem ipsum something</p>
</body>
</html>

Я знаю, что код не будет работать, но я надеюсь, что вы понимаете, о чем я.

18
SnackerSWE

file.php

ob_start();
include 'otherfile.php';
$string = ob_get_clean();
45
SmokeyPHP
$string = file_get_contents('otherfile.php',TRUE);
echo $string

Использование аргумента TRUE для file_get_contents () означает, что он будет искать, используя путь включения, как обычный include или require

10
Mark Baker

Еще одна интересная вещь, которую нужно знать, но ответ SmokeyPHP может быть лучше:

<?php
$var = require 'myfile.php';

myfile.php:

<?php
return 'mystring';
3
Manhim

Я думаю, вы уже решили проблему. Я столкнулся с той же проблемой в эти дни, и я нашел симпатичное решение с использованием функций eval, file_get_contents и буферизации вывода:

ob_start();
eval('?>' . file_get_contents( $fileToRequire, TRUE ) . '<?php ');
$this->output = ob_get_contents();
ob_end_clean();

Единственное, о чем вы должны позаботиться, это поместить php-код между тегами <?php ?> и не оставлять открытым любой php-тег. 

'?>' является обязательным, иначе вы получите ошибку из функции eval

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

Ура!

1
Fabrizio Sabato

Используйте шаблонизатор, например, Jinja http://jinja.pocoo.org/docs/

0
yaccz

Да, вы можете использовать оператор возврата в файле, и require и includes возвращают возвращаемое значение, но вам придется изменить файл, чтобы сказать что-то более похожее

<?php
    return '<p>Lorem ipsum something</p>';
?>

проверьте пример № 5 в разделе включите документацию http://www.php.net/manual/en/function.include.php

0
dqhendricks