ただし、もちろん通常モードではCLIではありません。他のHTMLに含まれるフォーマットされた出力は、既存のWebページのレイアウトを破壊します。
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と同じ情報を表示することに注意してください。これは、Webサーバーについて何も知りません。
于 2019-11-29T10:31:28.330 に答える