Максимальный лимит символов на функции preg? - PullRequest
0 голосов
/ 25 мая 2010

На моем сайте я использую буферизацию вывода, чтобы захватить весь вывод и затем запустить его через функцию процесса перед отправкой в ​​браузер (я ничего не заменяю, просто разбиваю на более управляемые части). В данном конкретном случае объем производства огромен, поскольку в нем указана метка для каждой страны в базе данных (около 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

Я пытался разместить метки на новых строках, сложить их вместе, похоже, ничего не работает. Но, как объяснено выше, если я удаляю случайные части этого, то это проходит хорошо. Функция прекрасно работает с любой другой страницей нормальной длины.

1 Ответ

0 голосов
/ 25 мая 2010

трудно сказать, не видя регулярное выражение и данные, но попробуйте изменить pcre.backtrack_limit / pcre.recursion_limit (http://www.php.net/manual/en/pcre.configuration.php)

...