是否可以将html添加到phpinfo页面?

时间:2017-12-20 08:30:50

标签: php html phpinfo

所以我正在创建自己的phpinfo.php页面。它回应了phpinfo()这很好,但我想添加html。我想在页面顶部添加一个后退按钮,将我带回我的主目录。然后在那个链接下面我将显示phpinfo()。我注意到phpinfo()会生成一个包含doctype和所有内容的完整html文档。这有解决方法吗?因为如果我在调用phpinfo()之前添加自己的html标签,那么结果将是一些html文档(在某些html标签下面)(显然不是w3标准)。我想到只是从phpinfo页面获取html输出并将其复制到文件中所以我不会调用phpinfo()但是如果我将来更改某些内容,我必须记得获取新信息,复制,再次将html粘贴到文档中。

那么有解决方法吗?

2 个答案:

答案 0 :(得分:1)

您可以捕获phpinfo()的输出:

// Get phpinfo() HTML
ob_start();
phpinfo();
$phpInfoHtml = ob_get_clean();

然后使用DOM和XPath提取您想要的HTML部分:

// Load HTML from string
try {
    $doc = (new DOMDocument())->loadHTML($phpInfoHtml);
} catch (Exception $e) {
    die('Caught exception: ',  $e->getMessage(), "\n");
}

// XPATH
$xpath = new DOMXpath($doc);
// Scrape your desired node(s)
$body = $xpath->query('//body');

答案 1 :(得分:0)

注意:在大多数情况下,您应该使用Genjo's answer。如果您没有PHP DOM模块(由Debian中的php-xml软件包提供),并且由于某种原因而不想安装它,那么这里的答案将为您提供一个替代方法。

您可以像这样将HTML添加到phpinfo页面:

  • 获取原始phpinfo的HTML。
  • 将phpinfo的HTML放入iframe。
  • 使用JavaScript操纵iframe中的DOM来添加/删除HTML。

<h1>Hello!</h1>添加到页面顶部的示例代码:

<?php
ob_start();
phpinfo();
$phpInfoHtml = htmlentities(ob_get_clean());
?>
<!DOCTYPE html>
<head>
    <title>phpinfo</title>
    <meta charset="utf-8">
</head>
<body>
    <style>
        #iframe {
            /* Make the iframe fill the whole page. */
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            border: none;
        }
    </style>

    <script>
        // Add HTML and CSS into the iframe.
        function editFrame() {
            var iframe = document.getElementById('iframe').contentDocument;
            var body = iframe.getElementsByTagName('body')[0];

            // Add a header.
            var div = iframe.createElement('div');
            div.innerHTML =
                '<div id="header">' +
                    '<h1>Hello!</h1>' +
                '</div>';
            body.insertBefore(div, body.firstChild);

            // Add CSS for the header.
            var css =  // Note: Only one CSS rule allowed per call of insertRule.
                '#header {' +
                    'width: 930px;' +
                    'margin: auto;' +
                '}';
            var sheet = iframe.styleSheets[0];
            sheet.insertRule(css, sheet.cssRules.length);
        }
    </script>

    <!-- The iframe. -->
    <iframe id="iframe" srcdoc="<?php echo $phpInfoHtml ?>" onload="editFrame();" />
</body>

结果:

Custom phpinfo