有没有办法强制 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 的单元格而不将其设置为可编辑?

有没有办法使单个 <div> 内容垂直居中而不影响 <div> 兄弟的内容?

当 hasTVPreferredFocus 被忽略时,有没有办法强制关注安卓电视上的可选内容?