有没有办法强制 phpinfo() 输出其内容而不进行格式化。就像在 CLI 模式下一样?
Posted
技术标签:
【中文标题】有没有办法强制 phpinfo() 输出其内容而不进行格式化。就像在 CLI 模式下一样?【英文标题】:Is there a way to force phpinfo() to output its stuff without formatting. Just like in CLI mode? 【发布时间】:2011-08-27 12:14:03 【问题描述】:当然在正常模式下不是 CLI。包含在其他 html 中的格式化输出会破坏现有的网页布局。
【问题讨论】:
检查 php.net/phpinfo 上的 cmets。那里有一些解决您的问题的方法。 【参考方案1】:如果您的主机允许您使用exec()
,您可以像在 CLI 上一样输出它,如下所示:
<?php
exec('php -i', $data);
var_dump($data);
请注意,这将显示与 CLI 上相同的信息,它对网络服务器一无所知。
【讨论】:
【参考方案2】:我刚刚为此目的创建了composer library。现在,它可以在从命令行调用时解析 phpinfo() 输出,这是我的用例。
我没有使用 strip_tags() 或任何聪明的技巧,而是从 original function 所做的一切倒退。
你可以像这样使用这个库:
<?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.
【讨论】:
【参考方案3】:function 在将 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;
【讨论】:
实际上对我不起作用,返回空数组【参考方案4】:在 PHP.net 网站上有一些将信息转换为数组的好例子。
Here is the best example。您可以循环访问该数组,以任何您喜欢的方式显示它。
【讨论】:
以上是关于有没有办法强制 phpinfo() 输出其内容而不进行格式化。就像在 CLI 模式下一样?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法强制 Grafana 中的 Stat 面板的输出只显示天数
有没有办法通过 main 函数访问受保护的向量大小而不将其公开?
有没有办法专注于 DataGrid 的单元格而不将其设置为可编辑?