Легко представить себе, что выполнение в качестве модуля, как правило, должно быть гораздо более эффективно, чем в качестве CGI, поскольку не надо запускать и завершать программу РНР для каждого запроса. Кроме того, тесная интеграция веб-сервера с модулями добавляет возможности, отсутствующие при запуске РНР в качестве CGI. Однако есть особые ситуации, когда выполнение в качестве CGI обеспечивает гибкость, недостижимую для модуля. Например, выполнение РНР в качестве CGI может происходить от имени пользователя с правами, расширенными или, наоборот, ограниченными по сравнению с правами при выполнении в качестве модуля веб-сервера.
Заметим, что выполнение РНР как модуля не препятствует доступу к нему как к CGI, что удобно также для работы, не связанной с Интернетом, например с планированием событий. Скажем, веб-сайт может использовать РНР в качестве модуля и в то же время применять CGI как отдельный интерпретатор для обычной работы с таблицами базы данных или для отправки электронной почты по расписанию.
В некоторых случаях решать не приходится, поскольку не с каждым вебсервером РНР может работать в виде модуля. РНР может выполняться как CGI на любом веб-сервере, поддерживающем CGI (а это практически все вебсерверы). Дополнительную поддержку выполнения РНР в качестве модуля осуществляют только перечисленные ниже веб-серверы.
Веб-серверы, поддерживающие модули под UNIX
♦ Apache
• thttpd • fhttpd
♦ Zeus
♦ Roxen
♦ Pi3Web
Веб-серверы, поддерживающие модули под Windows
♦ Microsoft IIS 4.0, 5.0*
♦ AOLServer
♦ WebSphere
♦ Netscape web server
♦ iPlanet (совместное предприятие Sun и NetScape)
♦ Любой сервер
В период написания книги версия РНР все еще проходи
ла фазу бета-тестирования, и ее не следовало устанавливать на реально эксплуатируемых веб-сайтах. Для работы РНР рекомендуется устанавливать отдельный интерпретатор CGI-PHP. В действительности ядро РНР вполне стабильно под ISAPI. Однако программные пакеты сторонних разработчиков и интерфейсы РНР для них не всегда безопасны по отношению к потокам. Можно использовать РНР в виде модуля под Windows с ISAPI, но придется тщательно протестировать DLL расширений сторонних разработчиков при высоких нагрузках, чтобы убедиться в их безопасности по отношению к потокам.
Статус поддержки ISAPI как бета-тестируемой версии не обязательно должен препятствовать установке РНР в качестве CGI на платформе Windows. Если только ваш веб-сервер под Windows не испытывает крайне высокой нагрузки, установка PHP CGI будет работать нормально. Только при очень высоком трафике модуль проявляет определенные преимущества по сравнению с CGI. Остальные проблемы, связанные с выбором CGI или модуля, несущественны и могут быть легко решены. Кроме того, установка РНР как CGI на машинах разработчиков под Windows и одновременное применение РНР в виде модуля на веб-сервере под UNIX в большинстве случаев оказываются очень