
Все перечисленные здесь фичи реализованы таким образом, чтобы ничего "не сломать". То есть,
если Вы их не используете, то их существование никак не скажется на функциональности php - все они "прозрачны".
Error header
Категория: удобство
По умолчанию, если вызываемый php скрипт содержит parse error, то пользователь получает
пустую "200 Ok" страницу. Это неудобно. Error header - это php.ini опция, которая позволяет в таких случаях выдавать произвольный HTTP код
ошибки, например "HTTP/1.0 550 Server Made Big Boo", который затем можно перехватить веб сервером и отобразить правильную error page. Для этого
в php.ini надо указать fastcgi.error_header = "HTTP/1.0 550 Server Made Big Boo"
В php-5.2.4 добавлена схожая, но упрощенная функциональность: если вызываемый php скрипт содержит parse error и display_errors == off то без
дополнительных настроек сразу выдается "HTTP/1.0 500 Internal Server Error". Если же Вам требуется выдавать код, отличный от 500 (который уже
используется во множестве случаев), либо хочется сделать это поведение независимым от значения display_errors, то используйте опцию fastcgi.error_header.
Если Вы используете php-5.2.4+ совместно с php-fpm, то fastcgi.error_header имеет приоритет.
Accelerated upload support
Категория: оптимизация
Эта фича, как видно из названия, позволяет ускорить обработку больших POST запросов, в том числе file uploads. Ускорение достигается
за счет того, что тело запроса записывается во временный файл и по fastcgi протоколу вместо тела передается имя этого файла. На данный момент,
насколько мне известно, только nginx 0.5.9+ поддерживает эту функциональность.
Очевидно, такая схема будет работать только если php находится на одном хосте с веб сервером.
Пример конфигурации nginx:
location ~ \.php$ {
fastcgi_pass_request_body off;
client_body_in_file_only clean;
fastcgi_param REQUEST_BODY_FILE $request_body_file;
...
fastcgi_pass ...;
}
В php ничего конфигурировать не нужно. Если php получает параметр REQUEST_BODY_FILE - он читает request body из этого файла.
Если параметра нет - происходит обычное чтение request body по протоколу fastcgi.
Вместе с этой фичей имеет смысл использовать "fs в памяти" для временных файлов, например tmpfs (linux):
client_body_temp_path /dev/shm/client_body_temp;
fastcgi_finish_request()
Категория: оптимизация
Эта фича позволяет немного ускорить выполнение php запросов. Ускорение возможно, если в процессе генерации страницы присутствуют какие-либо действия,
от результата выполнения которых не зависит выдаваемая страница. Например, сохранение сессии в memcached может происходить уже после того как
страница сформирована и отдана веб серверу. fastcgi_finish_request() - это функция php, которая завершает response output. Веб
сервер сразу же начинает "медленно и печально" отдавать его клиенту, а php в это время может выполнить много полезных вещей в контексте запроса,
таких как сохранение сессии, конвертирование загруженного видеоролика, обработка всевозможной статистики и т.п.
fastcgi_finish_request() можно вызывать и из shutdown function.