我有一个获取php_info()
并运行
ereg( '<body>(.*)</body>', $phpinfo, $regs );
这很好用但是由于它被弃用了我继续将它更新为preg_match
它看起来像这样
preg_match( '/<body>((?:.|\n)*)<\/body>/', $phpinfo, $regs );
但现在每次运行时都会重载服务器。它适用于regexr.com,因此它不应该是错误的。
ereg
和preg_match
匹配之间的区别是什么?如何在不炸毁服务器的情况下实现此目标?
我要做的是有一个显示php_info
的服务器页面,但是我的菜单和样式都很正常。任何替代方案也将受到赞赏。尽量远离iframe。
由于
PS。:Regexr说匹配的长度为105563个字符
答案 0 :(得分:1)
您可以通过添加s
modifier(允许点元字符匹配换行符)来调整正则表达式,如下所示:
preg_match('/<body>.*<\/body>/s', $phpinfo, $regs);
这会让你得到$regs[0]
的输出,并且应该尽可能快地使用正则表达式 - 显然这里没有太大的改进余地。
如果一个正则表达式仍然太慢,那么更高效的选项就是使用strpos
/ strrpos
/ substr
进行简单的旧字符串操作。
答案 1 :(得分:1)
正如Machavity建议你可能想要尝试将phpinfo
内容解析为DOM。您可以找到完整的示例HERE,但这是一个简化的数据转储,您可以根据需要进行处理:
<?php
ob_start();
$exts = get_loaded_extensions();
phpinfo();
$phpinfo = ob_get_contents();
ob_end_clean();
//print_r($phpinfo);
$html_str = $phpinfo;
$html = new DOMDocument();
$html->loadHTML($html_str);
$html->preserveWhiteSpace = false;
$td = $html->getElementsByTagName('td');
echo "<pre>";
foreach ($td as $value) {
print_r($value);
}
?>