Включить код из потока PHP - PullRequest
       3

Включить код из потока PHP

3 голосов
/ 08 декабря 2010

Мне интересно, возможно ли вообще создать потоковую обертку для загрузки некоторого кода из массива, используя что-то вроде следующего

<?php include 'template://myarraykey/'; ?>

и заставить его работать как обычныйвключить из файла?Причина в том, что я не хочу хранить шаблоны в файловой системе, они либо будут существовать в memcache или в таблице базы данных и демонстративно не хотят использовать eval ().

ТакжеЯ бы предположил, что мне нужно, чтобы allow_url_include был включен?

Ответы [ 4 ]

7 голосов
/ 04 октября 2011

Я знаю, что это старый вопрос ... но я думаю, стоит отметить, что вы можете сделать что-то вроде:

$content = '
  <?php if($var=true): ?>
    print this html
  <?php endif; ?>
';

Обычно это очень трудно сделать, но вы можете сделать:

include "data://text/plain;base64,".base64_encode($content);

И он будет быстро разбираться как!

2 голосов
/ 08 декабря 2010

Eval, слово, не зло. Что вы можете сделать с этим. Любой способ делать то, что вы хотите, будет иметь тот же риск, что и eval. Так что просто используйте eval, так как его обеспечение является более «известной» проблемой.

2 голосов
/ 08 декабря 2010

Включить может принимать произвольные 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";

1 голос
/ 08 декабря 2010

Поскольку include может использовать любой подходящий поток, и вы можете зарегистрировать свою собственную потоковую оболочку, я не вижу, почему нет.

Просто для удовольствия вы можете попробовать альтернативный вариант: загрузить свои данные из memcached ивключите его с помощью оболочки потока данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...