Я думаю, что я получаю переполнение стека, запускающее приложение cakePHP на сервере Apache под Windows 7.
Как увеличить размер стека для Apache под управлением Windows 7?
Ответ 1
Эта проблема происходит чаще на платформе Windows из-за меньшего размера стека Apache по умолчанию. В Windows установлен размер стека 1 МБ, в отличие от 8 МБ на платформах Unix/Linux. Это может быть причиной, почему некоторые, например, PHP-скрипты работают правильно в Linux, но вызывают сбои Apache в Windows.
Кроме того, аварийный сигнал не работает (ошибка сегментации), сообщения об ошибке отсутствуют, Apache просто перестает отвечать на запросы, и дочерний процесс перезапускается. Браузер не получает данных и отображает пустую страницу, поэтому немного сложно решить, что неправильно.
Это обычная проблема при работе с длинными регулярными выражениями в PHP.
В журнале ошибок Apache есть одно уведомление, которое сообщает, что дочерний процесс разбился:
Parent: child process exited with status ... -- Restarting
Лучший способ изменить размер стека Apache - это использовать директиву ThreadStackSize в файле конфигурации Apache. В документации Apache есть описание директивы ThreadStackSize: http://httpd.apache.org/docs/2.2/mod/mpm_common.html#ThreadStackSize
Таким образом, увеличение размера стека Apache в Windows может выглядеть следующим образом:
<IfModule mpm_winnt_module>
ThreadStackSize 8388608
</IfModule>
Эти строки должны быть помещены в файл конфигурации Apache. Для простоты вы можете указать httpd.conf. Или лучше (но не обязательно), поместите его в файл httpd-mpm.conf, а в httpd.conf раскомментируйте эту строку:
Include conf/extra/httpd-mpm.conf
Он устанавливает размер стека Apache до 8 МБ, поэтому он аналогичен значению по умолчанию для Linux.
И не забудьте перезапустить Apache!:)