На моем сайте я использую буферизацию вывода, чтобы захватить весь вывод и затем запустить его через функцию процесса перед отправкой в браузер (я ничего не заменяю, просто разбиваю на более управляемые части). В данном конкретном случае объем производства огромен, поскольку в нем указана метка для каждой страны в базе данных (около 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']
и пропускает все остальное.
http://pastebin.com/iGfM6gxx
Я пытался разместить метки на новых строках, сложить их вместе, похоже, ничего не работает. Но, как объяснено выше, если я удаляю случайные части этого, то это проходит хорошо. Функция прекрасно работает с любой другой страницей нормальной длины.