
phpinfo() 的 HTML 输出结构硬编码在 PHP 源码的 ext/standard/info.c 文件中,以纯 C 字符串形式生成表格()标记;无法通过配置修改,但可通过输出缓冲和 DOM 解析重写为语义化 div + CSS Grid 布局。
`phpinfo()` 的 html 输出结构硬编码在 php 源码的 `ext/standard/info.c` 文件中,以纯 c 字符串形式生成表格(`
`)标记;无法通过配置修改,但可通过输出缓冲和 DOM 解析重写为语义化 `div` + CSS Grid 布局。phpinfo() 并非动态模板渲染,而是由 C 扩展层直接拼接 HTML 字符串输出。打开 PHP 官方源码仓库(如 PHP 8.3 对应路径 ext/standard/info.c),可定位到 php_print_info() 等函数——其中大量使用 PUTS("<table>...")、<code>spprintf() 和硬编码的 <tr><td> 结构。这意味着:<strong>该结构不可通过 <code>php.ini、环境变量或运行时配置更改,也不支持 Twig/Vue 等模板引擎介入。
但你仍可优雅实现 CSS Grid 化改造。推荐方案是捕获原始输出并重构 DOM:
@@######@@配套 CSS Grid 示例:
@@######@@⚠️ 注意事项:
Html2md
使用 Readability + Turndown 将 HTML 页面转换为干净的、Agent 友好的 Markdown。去除导航栏、广告、页脚、Cookie 横幅、社交按钮等干扰元素。支持 URL...
下载
-
phpinfo() 输出含敏感信息(如路径、扩展版本、环境变量),切勿在生产环境公开访问;建议仅限本地开发或鉴权后使用。
-
DOMDocument 解析可能因原始 HTML 不规范报错,务必启用 libxml_use_internal_errors(true)。
- 若需完全定制(如按模块分组、折叠面板),建议改用
ini_get_all()、get_loaded_extensions()、zend_version() 等 API 手动构建数据,再用 Twig/Vue 渲染——更安全、更可控、更易测试。
总结:phpinfo() 的结构是 PHP 核心的“只读契约”,理解其 C 层实现有助于规避误判;而真正的现代化展示,应转向捕获 → 解析 → 重构的渐进式升级路径。
<?php ob_start();
phpinfo(INFO_ALL);
$html = ob_get_clean();
// 使用内置 DOMDocument 解析并重写(需启用 dom 扩展)
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 忽略 table 嵌套警告
$dom->loadHTML('<?xml encoding="utf-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();
// 移除原始 body 外壳,提取核心内容(通常在 内第一个
)
$table = $dom->getElementsByTagName('table')->item(0);
if ($table) {
$newDiv = $dom->createElement('div', '');
$newDiv->setAttribute('class', 'phpinfo-grid');
foreach ($table->getElementsByTagName('tr') as $row) {
$section = $dom->createElement('section');
$section->setAttribute('class', 'phpinfo-section');
$header = $row->getElementsByTagName('th')->item(0);
if ($header && $header->nodeValue) {
$title = $dom->createElement('h2', trim($header->nodeValue));
$section->appendChild($title);
}
$cells = $row->getElementsByTagName('td');
if ($cells->length >= 2) {
$key = trim($cells->item(0)->nodeValue);
$val = $dom->createElement('div', trim($cells->item(1)->nodeValue));
$val->setAttribute('class', 'phpinfo-value');
$section->appendChild($val);
}
$newDiv->appendChild($section);
}
// 替换原 table
$table->parentNode->replaceChild($newDiv, $table);
}
echo $dom->saveHTML();
?>.phpinfo-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem;
padding: 1.5rem;
}
.phpinfo-section {
border: 1px solid #e2e8f0;
border-radius: 0.5rem;
padding: 1rem;
background: #fff;
}
.phpinfo-section h2 {
font-size: 1.1rem;
margin: 0 0 0.75rem 0;
color: #2d3748;
}
.phpinfo-value {
font-family: ui-monospace, SFMono-Regular, 'Segoe UI Mono', monospace;
font-size: 0.9em;
white-space: pre-wrap;
word-break: break-all;
}
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!