Ресурсоёмкий preg_replace

[Удален]
664

Регулярное выражение для preg_replace очень объёмное - порядка 2кб. Состоит из фрагментов, которые надо удалять, наподобие:

$content=preg_replace("/ab|cd|ef|...../","",$content);

Скрипт отрабатывает в среднем за 1 секунду на локалхосте, на хостинге - быстрее, но при определённом объёме входных данных ($content) функция preg_replace выдаёт пустой результат. На локалхосте выдаёт всегда нужный. В чём может быть дело? Лимит памяти большой, в тайм лимит укладывается, в чём ещё может быть причина того, что функция preg_replace на определённом объёме данных выдаёт пустой результат? При этом скрипт не останавливается, а продолжает работать дальше.

Dreammaker
На сайте с 20.04.2006
Offline
569
#1

Собственно, по основному вопросу не могу ответить, но может, если ab, cd и т.д. - не паттерны, а прямые строки - попробовать str_replace и передавать ей как параметр массив, может это косвенно решит проблему?

[Удален]
#2

str_replace - не получится, там нужно удалять куски перед и после искомого фрагмента. Может preg_replace в цикле? :) Поделил регулярку на 4 части - странно, но это не помогло.

На локалхосте скрипт выполняется за 1.2-1.5 секунд, на хостинге - за 0.03, входной контент, который надо перелопатить - 60кб. Вроде бы, не такой уж и большой объём. Буду исследовать работу данной регулярки на других функциях.

Dreammaker
На сайте с 20.04.2006
Offline
569
#3

Посмотрите на http://bugs.php.net для preg_replace и версии пхп и ОС, которая на хостинге, может найдётся что-то непофиксенное.

N
На сайте с 06.05.2007
Offline
419
#4

C некоторых пор в php появилась настройка pcre.backtrack_limit. Может быть ваши данные иногда превышают 100кб?

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий