【发布时间】:2010-05-25 06:11:23
【问题描述】:
在我的网站上,我使用输出缓冲来获取所有输出,然后在将其发送到浏览器之前通过进程函数运行它(我不替换任何东西,只是将其分解成更易于管理的部分)。在这种特殊情况下,输出量很大,因为它为数据库中的每个国家(大约 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'] 中并跳过其他所有内容。
我尝试将标签放在新行上,将它们折叠在一起,但似乎没有任何效果。但是如上所述,如果我删除它的随机部分,那么它会很好。该功能适用于正常长度的其他所有页面。
【问题讨论】:
标签: php pattern-matching limit preg-match