Można to zrobić z output buffering:
function include2string($file) {
ob_start();
include($file);
return ob_get_clean();
}
@DaveRandom zaznacza (słusznie), że problem z tym owijania w funkcji jest to, że skrypt ($ file) nie będą miały dostępu do zmienna zdefiniowana globalnie. Może to nie być problemem dla wielu skryptów dołączanych dynamicznie, ale jeśli jest to problem dla ciebie, technika ta może być używana (jak pokazali inni) poza otoką funkcji.
** Importowanie zmiennych Jedną z rzeczy, którą możesz zrobić, to dodać zestaw danych, które chciałbyś narazić na swój skrypt jako zmienne. Pomyśl o tym, jak przekazywanie danych do szablonu.
function include2string($file, array $vars = array()) {
extract($vars);
ob_start();
include($file);
return ob_get_clean();
}
nazwałbyś to w ten sposób:
include2string('foo.php', array('key' => 'value', 'varibleName' => $variableName));
i teraz $key
i $variableName
byłby widoczny wewnątrz pliku foo.php.
Można również podać listę zmiennych globalnych, które można zaimportować do skryptu, jeśli wydaje się to bardziej zrozumiałe.
function include2string($file, array $import = array()) {
extract(array_intersect_key($GLOBALS, array_fill_keys($import, 1)));
ob_start();
include($file);
return ob_get_clean();
}
I chcesz to nazwać, dostarczając listę globalnych które chcesz narażonych na działanie skryptu:
$foo='bar';
$boo='far';
include2string('foo.php', array('foo'));
foo.php
powinien być w stanie zobaczyć foo
, ale nie boo
.
@safarov domyślam się, że to nie będzie ocenić jego zmienna –
myślę, że nie będzie zastępować $ a w pliku test.php. niech sprawdzę. – ppp