2010-12-08 8 views
3

からコードを含め、私は思ったんだけどファイルから通常のインクルードをしたいのですか?私が実際にファイルシステムにテンプレートを格納したくないので、memcacheまたはデータベーステーブルに存在し、挑戦的にeval()を使いたくないからです。はPHPストリーム

また、allow_url_includeをonに設定する必要があると思いますか?

答えて

2

Includeは任意のURLをとることができます。 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";

+0

いくつかのコーディングと少しのテストの後、私は、ストリームを使用するときに悪い木を鳴らしているという結論に至りました。この例ではevil()と同じ問題があります。 DBシステムとキャッシュもAPCによってキャッシュされるという利点があり、各テンプレートの編集後にファイルシステムのキャッシュを更新します。 – Stu

2

evalを、言葉に変更し、悪ではありません。あなたができることはそれです。あなたがしたいことをするための手段は、evalと同じリスクを持ちます。したがって、それを確保することがより「既知の」問題であるため、evalを使用してください。

1

includeは適切なストリームを使用でき、独自のストリームラッパーを登録することができますが、なぜそうは思わないのですか。

ちょうど面白いことに、あなたはmemcachedからデータを読み込み、data stream wrapperを使って埋め込むことができます。

7

私はこれが古い質問です知っている...しかし、私はそれはあなたのような何かを行うことができますことは注目に値すると思う:

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

通常これはevalのに非常に厄介だろうが、あなたが行うことができます:

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

そしてそれはそれのようなスナップを解析します!