11

ただし、もちろん通常モードではCLIではありません。他のHTMLに含まれるフォーマットされた出力は、既存のWebページのレイアウトを破壊します。

4

4 に答える 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と同じ情報を表示することに注意してください。これは、Webサーバーについて何も知りません。

于 2019-11-29T10:31:28.330 に答える