web-dev-qa-db-ja.com

PHPファイルを文字列として含める

このようなものを作ることは可能ですか?

// file.php
$string = require('otherfile.php');
echo $string;

// otherfile.php
<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<?php require 'body.php';?>
</body>
</html>

// body.php
<p>Lorem ipsum something</p>

そして、この出力を取得しますか?

<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<p>Lorem ipsum something</p>
</body>
</html>

コードが機能しないことは知っていますが、私の意味を理解していただければ幸いです。

22
SnackerSWE

file.php

ob_start();
include 'otherfile.php';
$string = ob_get_clean();
54
SmokeyPHP
$string = file_get_contents('otherfile.php',TRUE);
echo $string

File_get_contents()にTRUE引数を使用すると、通常のインクルードやrequireのように、インクルードパスを使用して検索されます。

12
Mark Baker

知っておくべきもう1つのすばらしいことですが、SmokeyPHPの答えの方が良いかもしれません。

<?php
$var = require 'myfile.php';

myfile.php:

<?php
return 'mystring';
4
maaudet

はい、ファイルでreturnステートメントを使用できます。requiresとincludesは戻り値を返しますが、ファイルを変更して、次のようなことを言う必要があります。

<?php
    return '<p>Lorem ipsum something</p>';
?>

インクルードドキュメントの例5を確認してください http://www.php.net/manual/en/function.include.php

1
dqhendricks

あなたはすでに問題を解決したと思います。私は最近同じ問題に直面し、eval、file_get_contents、および出力バッファリング関数を使用したかなりの解決策を見つけました。

ob_start();
eval('?>' . file_get_contents( $fileToRequire, TRUE ) . '<?php ');
$this->output = ob_get_contents();
ob_end_clean();

注意しなければならない唯一のことは、タグの間にphpコードを置くことです<?php ?>そしてphpタグを開いたままにしないでください。

'?>'は必須です。そうでない場合、eval関数からエラーが発生します。

それが役に立てば幸い!

乾杯!

0
Fabrizio Sabato

Joomlaとdompdfのソリューションが必要ですが、このソリューションを見つけました

ob_start();
require_once JPATH_COMPONENT . DIRECTORY_SEPARATOR . 'file.php';
$html = ob_get_clean();

require_onceでのみ、ロードされたスクリプトでJoomlaのすべての関数を使用できます。 file.phpは、.phpに名前が変更され、phpコードが追加された.htmlファイルです。

0
T.Kalweit

Jinjaのようなテンプレートエンジンを使用する http://jinja.pocoo.org/docs/

0
yaccz