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 回答