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