Ответ 1
У меня также был этот вопрос один раз, попробуйте что-то вроде
<?php
function requireToVar($file){
ob_start();
require($file);
return ob_get_clean();
}
$test=requireToVar($test);
?>
Я хочу потребовать/включить файл и загрузить его содержимое в переменную.
test.php
<?php
echo "seconds passed since 01-01-1970 00:00 GMT is ".time();
?>
index.php
<?php
$test=require("test.php");
echo "the content of test.php is:<hr>".$test;
?>
Подобно file_get_contents()
, но он все равно должен выполнять PHP-код.
Возможно ли это?
У меня также был этот вопрос один раз, попробуйте что-то вроде
<?php
function requireToVar($file){
ob_start();
require($file);
return ob_get_clean();
}
$test=requireToVar($test);
?>
Если ваш включенный файл возвратил переменную...
<?php
return 'abc';
... тогда вы можете присвоить его переменной, подобной этой...
$abc = include 'include.php';
В противном случае используйте буферизацию вывода.
ob_start();
include 'include.php';
$buffer = ob_get_clean();
Вы можете записать во включенный файл:
<?php
return 'seconds etc.';
И в файл, из которого вы включаете:
<?php
$text = include('file.php'); // just assigns value returned in file
В PHP/7 вы можете использовать самозапускающуюся анонимную функцию для выполнения простой инкапсуляции и предотвращения глобального заражения со случайными глобальными переменными:
return (function () {
// Local variables (not exported)
$current_time = time();
$reference_time = '01-01-1970 00:00';
return "seconds passed since $reference_time GMT is $current_time";
})();
Альтернативным синтаксисом для PHP/5.3 + будет:
return call_user_func(function(){
// Local variables (not exported)
$current_time = time();
$reference_time = '01-01-1970 00:00';
return "seconds passed since $reference_time GMT is $current_time";
});
Затем вы можете выбрать имя переменной, как обычно:
$banner = require 'test.php';
Используйте shell_exec("php test.php")
. Он возвращает результат выполнения.
require/include не возвращает содержимое файла. Вам нужно будет сделать отдельные звонки, чтобы достичь того, что вы пытаетесь сделать.Забастовкa >
ИЗМЕНИТЬ
Использование echo
не позволит вам делать то, что вы хотите. Но возврат содержимого файла будет выполнен, как указано в руководстве - http://www.php.net/manual/en/function.include.php
Я думаю, eval(file_get_contents('include.php'))
поможет вам.
Помните, что на вашем хостинге можно отключить другой способ выполнения, например, shell_exec.
Возможно, только если требуемый или включенный файл php возвращает что-то (массив, объект, строка, int, переменная и т.д.)
$var = require '/dir/file.php';
Но если это не php файл, и вы хотите оценить его содержимое, вы можете:
<?php
function get_file($path){
return eval(trim(str_replace(array('<?php', '?>'), '', file_get_contents($path))));
}
$var = get_file('/dir/file.php');
Или что-то вроде этого
в файле include.php:
<?php
//include.php file
$return .= "value1 ";
$return .= time();
в другом файле php (не важно, что является содержимым этого файла):
<?php
// other.php file
function() {
$return = "Values are: ";
include "path_to_file/include.php";
return $return;
}
return будет выглядеть так:
Values are: value1, 145635165
Дело в том, что содержимое включенного файла имеет ту же область, что и содержание функции в примере, о котором я рассказал.