Есть ли способ заставить phpinfo () выводить свои вещи без форматирования.Как в режиме CLI? - PullRequest
9 голосов
/ 17 мая 2011

Но, конечно, в обычном режиме не CLI. Форматированный вывод, включенный в число других HTML, разрушает существующий макет веб-страницы.

Ответы [ 3 ]

2 голосов
/ 22 августа 2015

Эта функция отлично справляется с преобразованием 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;
}
2 голосов
/ 20 февраля 2017

Я только что закончил создание библиотеки композитора для этой цели. Прямо сейчас он может анализировать вывод 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.
2 голосов
/ 17 мая 2011

На сайте PHP.net есть несколько хороших примеров преобразования информации в массив.

Вот лучший пример . Вы можете перебрать этот массив, чтобы отобразить его любым удобным для вас способом.

...