包含PHP流中的代码

时间:2010-12-08 15:46:30

标签: php include stream

我想知道是否可以创建一个流包装器,以便从数组中加载一些代码,使用类似下面的内容

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

让它像从文件中进行正常包含一样工作吗?问的原因是因为我真的不想在文件系统上存储模板,它们要么存在于memcache中,要么存在于数据库表中,并且不想使用eval()。

另外我会假设我需要将allow_url_include设置为on?

4 个答案:

答案 0 :(得分:7)

我知道这是一个老问题...但我认为值得注意的是你可以做类似的事情:

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

通常这对eval来说非常麻烦,但你可以这样做:

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

它会像它一样解析它!

答案 1 :(得分:2)

包含可以采取任意网址。阅读this。以下是从中获取的示例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";

即可

答案 2 :(得分:2)

eval,这个词,不是邪恶的。你可以做的事情是。任何做你想做的事情都会和eval一样。所以只需使用eval,因为确保它是一个更“已知”的问题。

答案 3 :(得分:1)

由于include可以使用任何适当的流,您可以注册自己的流包装器,我不明白为什么不这样做。

只是为了好玩,您可以尝试另一种方法:从memcached加载数据并使用data stream wrapper包含它。