在我的站点上,我使用输出缓冲来获取所有的输出,然后在将其发送到浏览器之前通过一个进程函数运行它(我不替换任何内容,只是将其分解为更易于管理的部分)。在这个特殊的例子中,有大量的输出,因为它列出了数据库中每个国家(大约240个国家)的标签。问题是,我的preg\u match函数似乎被跳过了,它完全不做任何事情,也不返回任何匹配。但是,如果我删除了部分标签(没有特定的部分,只是随机的减少字符),那么preg\u match函数会再次工作。我从标签上去掉什么似乎无关紧要,只是好像只要我去掉这么多字符。preg函数能处理什么有什么限制吗?如果有太多的数据需要扫描,它会超时吗?
public function boom($data) {
$number = preg_match_all("/(<!-- ([\w]+):start -->)\n?(.*?)\n?(<!-- \\2:stop -->)/s", $data, $matches, PREG_SET_ORDER);
if ($number == 0) $data = array("content" => $data);
else unset($data);
foreach ($matches as $item):
//$item[3] = preg_replace("/\n/", "", $item[3], 1);
if (preg_match("/<!-- breaker -->/s", $item[3])) $data[$item[2]] = explode("<!-- breaker -->", $item[3]);
else $data[$item[2]] = $item[3];
endforeach;
//die(var_dump($data));
return $data;
}
这是发送到页面的未处理的输出。我已经确定,在变量中返回0个匹配项的是开头的preg\u match\u all,因此函数只是将它接收到的整个字符串抛出
$data['content']
http://pastebin.com/iGfM6gxx