但当然在正常模式下不是 CLI。包含在其他 HTML 中的格式化输出会破坏现有的网页布局。
问问题
7920 次
4 回答
3
此函数在将 phpinfo 转换为数组方面做得很好。
function parse_phpinfo() {
ob_start(); phpinfo(INFO_MODULES); $s = ob_get_contents(); ob_end_clean();
$s = strip_tags($s, '<h2><th><td>');
$s = preg_replace('/<th[^>]*>([^<]+)<\/th>/', '<info>\1</info>', $s);
$s = preg_replace('/<td[^>]*>([^<]+)<\/td>/', '<info>\1</info>', $s);
$t = preg_split('/(<h2[^>]*>[^<]+<\/h2>)/', $s, -1, PREG_SPLIT_DELIM_CAPTURE);
$r = array(); $count = count($t);
$p1 = '<info>([^<]+)<\/info>';
$p2 = '/'.$p1.'\s*'.$p1.'\s*'.$p1.'/';
$p3 = '/'.$p1.'\s*'.$p1.'/';
for ($i = 1; $i < $count; $i++) {
if (preg_match('/<h2[^>]*>([^<]+)<\/h2>/', $t[$i], $matchs)) {
$name = trim($matchs[1]);
$vals = explode("\n", $t[$i + 1]);
foreach ($vals AS $val) {
if (preg_match($p2, $val, $matchs)) { // 3cols
$r[$name][trim($matchs[1])] = array(trim($matchs[2]), trim($matchs[3]));
} elseif (preg_match($p3, $val, $matchs)) { // 2cols
$r[$name][trim($matchs[1])] = trim($matchs[2]);
}
}
}
}
return $r;
}
于 2015-08-22T20:53:11.240 回答
3
我刚刚为此目的创建了作曲家库。现在,它可以在从命令行调用时解析 phpinfo() 输出,这是我的用例。
我没有使用 strip_tags() 或任何聪明的技巧,而是从原始函数所做的所有事情中倒退。
您可以像这样使用该库:
<?php
include_once('vendor/autoload.php');
ob_start();
phpinfo();
$phpinfoAsString = ob_get_contents();
ob_get_clean();
$phpInfo = new OutCompute\PHPInfo\PHPInfo();
$phpInfo->setText($phpinfoAsString);
var_export($phpInfo->get());
?>
您可以访问模块内和其他地方的密钥:
echo $phpInfoArray['Configuration']['bz2']['BZip2 Support']; # Will output 'Enabled' if enabled
或者
echo $phpInfoArray['Thread Safety'] # Will output 'disabled' if disabled.
于 2017-02-20T02:25:06.600 回答
2
PHP.net 网站上有一些将信息转换为数组的好例子。
这是最好的例子。您可以循环遍历该数组以任何您喜欢的方式显示它。
于 2011-05-17T19:14:20.320 回答
0
如果您的主机允许您使用exec()
,您可以像在 CLI 上一样输出它,如下所示:
<?php
exec('php -i', $data);
var_dump($data);
请注意,这将显示与 CLI 上相同的信息,它对网络服务器一无所知。
于 2019-11-29T10:31:28.330 回答