Я всегда запускал PHP в режиме ISAPI. Самый большой недостаток этого метода — его низкая стабильность. Когда PHP работает неправильно, процесс Apache также умирает. Позже я увидел в Интернете информацию о работе PHP в режиме FastCGI. Различные упомянутые преимущества (стабильность, безопасность, высокая производительность) побудили меня попробовать.
Однако дела пошли далеко не так гладко, как ожидалось. Я бесчисленное количество раз искал в Google, но не смог найти никакой информации о том, как использовать Apache + FastCGI для запуска PHP под Windows. Довольно много людей используют IIS + FastCGI для запуска PHP. В одной из статей упоминалось, что Zend также рекомендует запускать PHP в режиме FastCGI ( http://phplens.com/phpeverywhere/fastcgi-php ).
После нескольких часов исследований я наконец успешно внедрил Apache 1.3 + FastCGI для запуска PHP.
Подготовка:
Сначала посетите http://www.fastcgi.com/dist/, чтобы загрузить mod_fastcgi для Apache. Я использую mod_fastcgi-2.4.2-AP13.dll. После загрузки скопируйте этот файл в каталог модулей Apache.
Загрузите PHP (я использую PHP-5.0.4) и разархивируйте его, при необходимости измените файл php.ini. Обратите внимание, что вам не нужно копировать какие-либо файлы из каталога PHP в каталог Windows.
Изменить конфигурацию:
Затем измените файл httpd.conf и добавьте следующие строки:
LoadModule fastcgi_module elements/mod_fastcgi-2.4.2-AP13.dll.
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -процессы 3
# Примечание: здесь -processes 3 означает запуск трех процессов php-cgi.exe.
# Подробные параметры FastCgiServer см. в документации FastCGI.
Приложение AddType/x-httpd-fastphp5.php
Приложение действия/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
# Описание: Измените два слова, выделенные жирным шрифтом выше, в соответствии с расположением вашего PHP-файла.
После завершения модификации просто перезапустите Apache.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ:
Согласно моим многочисленным экспериментам, наиболее распространенные проблемы в основном вызваны путями. Поэтому сначала проверьте, все ли пути в файлах php.ini и httpd.conf верны. Во-вторых, если в системе ранее был установлен PHP, то C:Windowsphp.ini необходимо переименовать или удалить.
Во-вторых, проверьте, имеет ли каталог, в котором находится файл PHP, достаточные разрешения (я установил для него «Все — Полный доступ», в любом случае вам не нужно учитывать столько ограничений безопасности на машинах разработки).
Преимущества запуска PHP в режиме FastCGI:
Запуск PHP в режиме FastCGI имеет несколько основных преимуществ. Во-первых, при сбое PHP он не приведет к остановке Apache, но произойдет сбой собственного процесса PHP (но FastCGI немедленно перезапустит новый процесс PHP, чтобы заменить вышедший из строя процесс). Во-вторых, режим FastCGI имеет лучшую производительность при запуске PHP, чем режим ISAPI (первоначально я использовал для тестирования ApacheBench, но забыл сохранить результаты. Если вам интересно, вы можете проверить это самостоятельно).
Наконец, вы можете запускать PHP5 и PHP4 одновременно. Ссылаясь на файл конфигурации ниже, было установлено два виртуальных хоста: один использует PHP5, а другой — PHP4.
LoadModule fastcgi_module elements/mod_fastcgi-2.4.2-AP13.dll
ScriptAlias /fcgi-php5/ "d:/usr/local/php-5.0.4/"
FastCgiServer "d:/usr/local/php-5.0.4/php-cgi.exe" -процессы 3
ScriptAlias /fcgi-php4/ "d:/usr/local/php-4.3.11/"
FastCgiServer "d:/usr/local/php-4.3.11/php.exe"
Слушайте 80
NameVirtualHost *:80
DocumentRoot d:/www
Индексы опций FollowSymlinks MultiViews
Имя_сервера php5.localhost
Приложение AddType/x-httpd-fastphp5 .php
Приложение действия/x-httpd-fastphp5 "/fcgi-php5/php-cgi.exe"
IndexOptions FancyIndexing FoldersFirst
Индексы опций FollowSymLinks MultiViews
Аллововерид нет
Заказ разрешить, запретить
Разрешить со всех
Слушай 8080
ИмяVirtualHost *:8080
DocumentRootd:/www
Индексы опций FollowSymlinks MultiViews
Имя_сервера php4.localhost
Приложение AddType/x-httpd-fastphp4 .php
Приложение действия/x-httpd-fastphp4 "/fcgi-php4/php.exe"
Индексы опций FollowSymLinks MultiViews
Аллововерид нет
Заказ разрешить, запретить
Разрешить со всех
Используя приведенную выше конфигурацию, PHP5 используется при доступе к http://localhost/ , а PHP4 используется при доступе к http://localhost:8080/ . Поэтому, если он правильно настроен, разные виртуальные хосты могут использовать разные версии PHP.
Некоторые недостатки режима FastCGI:
Поговорив о преимуществах, поговорим о недостатках. Судя по моему фактическому использованию, режим FastCGI больше подходит для серверов в производственных средах. Но он не подходит для машин разработки. Потому что при использовании Zend Studio для отладки программы FastCGI посчитает, что время PHP-процесса истекло, и вернет на странице ошибку 500. Это настолько раздражало, что я снова переключился в режим ISAPI на своей машине разработки.
Наконец, существует потенциальная уязвимость безопасности в режиме FastCGI в Windows. Поскольку я не нашел способа реализовать SuEXEC в среде Windows, процесс PHP всегда выполняется с наивысшими привилегиями, что, очевидно, не является хорошей новостью с точки зрения безопасности.
Заключение:
Применение FastCGI в этой статье все еще находится на очень предварительной стадии и используется только в качестве отправной точки в надежде, что появятся более зрелые решения.