2

たとえば、スクリプトがある場合:

<?php

     $page = "My Page";
     echo "<title>" . $page . "</title>";
     require_once('header.php');
     require_once('content.php');
     require_once('footer.php');


?>

そのページの下部に追加して、コンパイル済みのphp全体を表示できるものはありますか?

コンパイルするのではなく、文字通りphpコードをエコーし​​たい。

だから私のブラウザでは、コード形式で次のように表示されます...

// stuff from main php
$page = "My Page";
echo "<title>" . $page . "</title>";

// stuff from require_once('header.php');
$hello = "Welcome to my site!";
$name = "Bob";
echo "<div>" . $hello . " " . $name . "</div>";

// stuff from require_once('content.php');
echo "<div>Some kool content!!!!!</div>";

// stuff from require_once('footer.php');
$footerbox = "<div>Footer</div>";
echo $footerbox;

これは可能ですか?

4

2 に答える 2

2

PHPにネイティブでそれを行う方法はありませんが、非常に単純で堅牢でないものが必要な場合は、ハッキングを試みることができます。

<?php
$php = file_get_contents($_GET['file']);

$php = preg_replace_callback('#^\s*(?:require|include)(?:_once)?\((["\'])(?P<file>[^\\1]+)\\1\);\s*$#m', function($matches) {
    $contents = file_get_contents($matches['file']);
    return preg_replace('#<\?php(.+?)(?:\?>)?#s', '\\1', $contents);
}, $php);

echo '<pre>', htmlentities($php), '</pre>';

ノート:

  • 警告:最初の行で行ったように任意のファイル解析を許可することはセキュリティホールです。独自の認証、パス制限などを行います。
  • これは再帰的ではないため(そうするのにそれほど多くの作業は必要ありませんが)、他のインクルードファイル内のインクルードファイルなどを処理しません。
  • 正規表現のマッチングは堅牢ではなく、非常に単純です。
  • 含まれるファイルは、文字列内で静的に名前が付けられていると見なされます。のようなもの、include($foo);またはinclude(__DIR__ . '/foo.php');機能しないもの。

免責事項:基本的に、これを正しく行うには、PHPコードを実際に解析する必要があります。それは興味深い問題であり、私は退屈だったので、私は上記を提供するだけです。

于 2012-08-11T16:10:12.520 に答える
1
echo '$page = "My Page";';
echo 'echo "<title>" . $page . "</title>";';
echo file_get_contents('header.php');
echo file_get_contents('content.php');
echo file_get_contents('footer.php');

わかりやすくするために、タイトル生成を独自のファイルに入れてから、一連のecho file_get_contents()...を使用します。

echo file_get_contents('title.php');
echo file_get_contents('header.php');
echo file_get_contents('content.php');
echo file_get_contents('footer.php');
于 2012-08-11T15:42:09.520 に答える