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