PHPコードを変数に実行することは可能ですか? たとえば、同じディレクトリにindex.php
とファイルがあります。page.php
実行page.php
するとHTMLページの一部が出来上がります。これを文字列として の変数に入れたいindex.php
。助言がありますか?
6 に答える
出力バッファを使用できます。
<?php
ob_start();
include('page.php');
$page = ob_get_clean();
?>
page.php は引き続き同じコンテキストで実行されることに注意してください (グローバル変数、関数などは引き続き存在します)。
一般に、そのようなことを行うと、設計が壊れているように聞こえ、page.php を適切に書き直す必要があります。
include('page.php');
これには から までのすべてが含まれpage.php
ますindex.php
page.php からコードの一部を実行したい場合は、ファイルを含めて、次のように page.php で関数を作成できます。
<?php include('page.php');
$test = function MyHtmlCode();
echo $text;
?>
cURLを使用して、スクリプトの出力を取得し、変数に保存できます。index.php で行うことは次のとおりです。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, ‘page.php’);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$contents = curl_exec ($ch);
応答だけが必要な場合は、他のスクリプト (および関連する変数) をページに含める必要はありません。スクリプトを含めるということは、変数名、関数名などの間の競合を避ける必要があることを意味します。
サンプルコードを提供しなかったので、ページが実際に印刷され(echo、printなどを使用)、php出力バッファリングを使用できると想定します。
<?php
ob_start();
require_once('index.php');
$out = ob_get_contents();
ob_end_clean();
?>
(編集)
これは解決策ですが、それは間違いなくベストプラクティスではありません...それは、HTMLを出力するコードをHTMLを生成して返す関数に移動し、それらの関数をに含まれる別のファイルに移動することです。 index.phpとpage.phpの両方を使用してから、関数を呼び出すだけです。一部の出力を出力する必要のあるファイルを含め、出力バッファーでワープすると、コードが読み取れなくなり、乱雑になります。
これを試してみてください:
ob_start()
include('page.php');
$variable = ob_get_clean();
これにより、出力バッファーが開始され、page.php
ファイルが含まれ、出力バッファーに書き込まれたすべてのものが$variable