apache — Лучшие практики использования выхода PHP из FastCGI

Я наткнулся на некоторый код, используя exit прервать обработку запроса, как только возникла ошибка. Я не эксперт по PHP, но моя непосредственная реакция, зная FastCGI на высоком уровне, заключается в том, что это может выйти из процесса и, как правило, является плохой идеей. Это было не так с Nginx и моим текущим PHP, но с древними версиями Apache, это была проблема. Документация PHP по FastCGI была довольно редкий, но он упомянул fastcgi_finish_request который выглядит как изящный способ завершить запрос.

Документация для exit неясно, имеет ли это какое-либо влияние на производительность для FastCGI, но есть тонкое различие в том, что он существует скрипт, не процесс. Документация для header на самом деле использует exitи я нашел образец в несколько Переполнение стека сообщений, но оправдание было «поэтому вы не отправляете тело», а не «если вы не отправляете тело после заголовка, тело будет пустым, а перенаправление будет работать как положено».

Я также нашел противоречивые ответы о том, вызывает ли это проблемы. Это и Dreamhost рекомендует против exit при использовании FastCGI (хотя их пример в Perl). Единственное место, где оно определенно вызывает проблемы — это модульное тестирование.

Итак, мой вопрос: какова лучшая практика для использования exit на веб-страницах PHP? Является fastcgi_finish_request лучший выбор? Будет ли реструктуризация потока управления лучше? Являются ли проблемы, о которых сообщают люди, специфичными для Apache? Или это просто еще одна версия returns плохая практика программирования?

2

Решение

1, во-первых, вы должны использовать php-fpm, а не старый модуль fastcgi.
2, exit в php не означает выход из текущего процесса. Документ уже говорит, особенно когда PHP работает на сервере fastcgi. Это просто прервать сеанс intepretor. Процесс продолжается и выбирает другой http-запрос из пула соединений nginx / apache, а php-fpm снова вызывает механизм.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector