Я задаюсь вопросом, возможно ли вообще создать обертку потока, чтобы загрузить некоторый код из массива в использование чего-то вроде следующего
<?php include 'template://myarraykey/'; ?>
и работать ли он, как делать нормальное включение из файла? Причина запроса заключается в том, что я действительно не хочу хранить шаблоны в файловой системе, они либо будут существовать в memcache, либо в таблице базы данных и вызывающе не хотят использовать eval ().
Также я бы предположил, что мне нужно включить allow_url_include?
Я знаю, что это старый вопрос … но я думаю, что стоит отметить, что вы можете сделать что-то вроде:
$content = ' <?php if($var=true): ?> print this html <?php endif; ?> ';
Обычно это было бы очень громоздким для оценки, но вы можете сделать:
include "data://text/plain;base64,".base64_encode($content);
И он будет разбирать это быстро!
Include может принимать произвольные URL-адреса. Прочтите это . Вот пример HTTP-кода, взятый оттуда:
<?php /* This example assumes that www.example.com is configured to parse .php * files and not .txt files. Also, 'Works' here means that the variables * $foo and $bar are available within the included file. */ // Won't work; file.txt wasn't handled by www.example.com as PHP include 'http://www.example.com/file.txt?foo=1&bar=2'; // Won't work; looks for a file named 'file.php?foo=1&bar=2' on the // local filesystem. include 'file.php?foo=1&bar=2'; // Works. include 'http://www.example.com/file.php?foo=1&bar=2'; $foo = 1; $bar = 2; include 'file.txt'; // Works. include 'file.php'; // Works. ?>
И просто измените его на include "template://$thevalue";
eval, это слово, не является злом. Вещи, которые вы можете сделать с этим. Любые способы делать то, что вы хотите, будут иметь тот же риск, что и eval. Так что просто используйте eval, так как обеспечение его является более «известной» проблемой.
Поскольку include
может использовать любой соответствующий поток, и вы можете зарегистрировать свою собственную обертку потока, я не понимаю, почему нет.
Просто для удовольствия вы можете попробовать альтернативу: загрузите свои данные из memcached и включите его, используя оболочку потока данных .