PHP PCRE Functions kills apache childprocess

Apache + mod_php + pcre functions = apache child pid exit signal Illegal instruction

Разработчики попросили разобраться с проблемой. Рри использовании preg_replace при определенном размере строковой переменной, над которой совершались всякие pcre преобразования, apache падал с сообщением  “apache child pid 3232 exit signal Illegal instruction”.

Паттерн, которым обрабатывали строку и правда был страшен, и первым делом я попросил разработчиков его переписать, но оказалось, что они его выдрали из Zend Framework… Да и вот так падать apache не должен в любом случае.

Нашел на php.net bug, очень похожий на мой случай, и еще несколько сообщений. Но решения там не было, кроме слов, что скорее всего дело в размере стека, который выделяется процессу apache.

Первым желанием было подправить stacksize в FreeBSD, но оказалось, что он и так 64MB… Так что осталось только одно – пинать библиотеку pcre. В man pcrestack есть упоминание, что pcre можно собрать с заменой использования стека на кучу. В man pcrebuild есть нужная опция: –disable-stack-for-recursion.

Дальше пересобираем библиотеку pcre и apache, за одно еще расширение php для pcre функций…


Четверг, Август 27th, 2009 Советы
Cheap Retro Replica NFL NBA MLB Throwback Football Basketball Jerseys | hp printer ink cartridges refills| Jewelry Making Supplies | Thumb Joint Pain | Dog Health Problems |Tinkerbell Personal Checks |Garden Planters