在我的网站上,我使用输出缓冲来获取所有输出,然后通过流程函数运行它,然后将其发送到浏览器(我不会替换任何东西,只需将其分解为更易于管理的部分)。在这种特殊情况下,有大量的输出,因为它列出了数据库中每个国家(大约240个国家)的标签。问题是,在我看来,我的preg_match函数似乎被跳过了,它绝对没有任何内容并且没有返回匹配项。但是,如果我删除部分标签(没有特定部分,只是随机部分以减少字符),那么preg_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;
}
这是发送到页面的未处理输出。我已经确定在开头的preg_match_all在变量中返回0个匹配项,因此该函数只是将收到的整个字符串抛出到$data['content']
并跳过其他所有内容。
我尝试将标签放在新线上,将它们折叠在一起,似乎没什么用。但如上所述,如果我删除它的随机部分,那么它会很好。该功能与正常长度的每个其他页面完美配合。
答案 0 :(得分:0)
很难说没有看到你的正则表达式和数据,但试着改变pcre.backtrack_limit / pcre.recursion_limit(http://www.php.net/manual/en/pcre.configuration.php)