显示包含 require 语句的页面代码


Show a pages code including require statements

我正在尝试将php文件的代码显示为纯html。这一切都进展顺利,除了我希望它也"打开"<?php require 'Main_content_bar.php'; ?>陈述的事实。

到目前为止,我已经show_source($page);正常工作。

它当前打印:

<?php require 'Main_content_bar.php'; ?>
<!-- Jumbotron -->
<div class="jumbotron">
    <h1>Property</h1>
    <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus
        commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.</p>
</div>

<div class="row">
    <div class="col-md-12">
        <h2>Current properties</h2>

    </div>
</div>

<div class="footer">
    <p><a href="Source_code.php" target="_blank"> <img src="Images/codebutton<?php echo $page_lower;?>.jpg" alt="<?php echo $page;?> Source"> </img>
        </a></p>
    <p>&copy; Robin B'stards Retail 2014</p>
</div>

</body>
</html>

但是,如您所见,require语句的内容并未显示。我一辈子都想不出该怎么做。

所以它最终看起来像这样:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <script src="jquery-2.1.1.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<!--    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.2/css/bootstrapValidator.min.css"/>-->
<!--    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.2/js/bootstrapValidator.min.js"></script>-->
    <link href="justified-nav.css" rel="stylesheet">
    <script>
        $(function(){
            var url = window.location.href;
            var page = url.substr(url.lastIndexOf('/')+1);
            $('.nav a[href*="'+page+'"]').parent().addClass('active');
        });
    </script>
</head>
<body>
<div class="container" style="width: 1263px">
    <div class="masthead">
        <h3 class="text-muted">Ruthless Real Estate</h3>
        <ul class="nav nav-justified">
            <li class="menu"><a href="Property.php">Property</a></li>
            <li class="menu"><a href="Client.php">Client</a></li>
            <li class="menu"><a href="Type.php">Type</a></li>
            <li class="menu"><a href="Feature.php">Feature</a></li>
            <li class="menu"><a href="Multiple_properties.php">Multiple Properties</a></li>
            <li class="menu"><a href="Property_features.php">Property Features</a></li>
            <li class="menu"><a href="Images.php">Images</a></li>
        </ul>
    </div>
<!-- Jumbotron -->
<div class="jumbotron">
    <h1>Property</h1>
    <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus
        commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.</p>
</div>

<div class="row">
    <div class="col-md-12">
        <h2>Current properties</h2>

    </div>
</div>

<div class="footer">
    <p><a href="Source_code.php" target="_blank"> <img src="Images/codebutton<?php echo $page_lower;?>.jpg" alt="<?php echo $page;?> Source"> </img>
        </a></p>
    <p>&copy; Robin B'stards Retail 2014</p>
</div>

</body>
</html>

注意缺少 require 语句

你不能

show_source做到这一点,它只是"显示文件的一些代码源"。

您需要创建自己的函数,该函数在参数中采用文件名,然后您必须像这样分析源代码:

  • 将所有要求/包含/require_once/include_once(我忘记了什么?(替换为他们自己的内容
  • 使函数递归(因为Main_content_bar.php里面可以包含其他内容(
  • 在函数末尾使用 highlight_string

编辑搜索和替换,一种方法(有几种(是使用preg_match_all。这部分代码如下所示:

$new_content = file_get_contents('your-file.php');
$base_path   = __DIR__.'/';
// pattern to find require, require_once, include, include_once functions
// and catch their arguments
$pattern = "#<'?php (?:require|include(?:_once)?)'s*'(.*)'; '?>#u";
if (preg_match_all($pattern, $new_content, $matches))
{
  foreach($matches[0] as $pattern_index => $full_pattern)
  {
    $file = $matches[1][$pattern_index];
    $subcontent = file_get_contents($base_path.$matches[$pattern_index]);
    $new_content = str_replace($new_content, $full_pattern, $subcontent);
  }
}
highlight_string($new_content);