Pers.narod.ru. PHP. Статьи. Установка PHP 5 под IIS 5.1 или 6.0 (Windows Xp SP2/SP3)

Дополнение к несколько устаревшей статье "Ставим PHP и MySQL под Windows XP".

В эту заметку вошли замечания, касающиеся особенностей установки (обновления) PHP последних версий при использовании встроенного в Windows сервера IIS. Я лично предпочитаю тестировать скрипты на локалхосте именно под IIS, поскольку если удалось заставить приложение PHP работать под Windows и IIS, то уж под FreeBSD и Apache оно точно заработает, но обратного никак нельзя утверждать.

Первое. Для использования с FastCGI рекомендуется устанавливать версию PHP без контроля безопасности потоков (Non-thread-safe Win32 binaries), поскольку сам модуль FastCGI гарантирует, что выполнение происходит в одном потоке и поддержка контроля в самом PHP даёт только лишние проверки и блокировки, приводящие к значительному падению производительности.

Второе. Кроме описанных в основной статье настроек, имеет смысл открыть файл php.ini-recommended из папки установки PHP, сделать с него копию под именем php.ini и взглянуть на следующие настройки:

open_basedir =
- папка, где размещены приложения PHP.
Указание конкретной папки ограничит права доступа к файлам PHP приложений только этой папкой.

cgi.force_redirect = 0
IIS сама контролирует безопасность выполнения PHP, и ставить эту настройку в 1 нет необходимости. Более того, можно получить неожиданные "тормоза". А вот для других web-серверов на Windows настройку лучше включить

cgi.fix_pathinfo = 1
PHP будет устанавливать имя файла в переменной SCRIPT_FILENAME, если установить значение 0, то имя файла будет в переменной PATH_TRANSLATED, что может нарушить совместимость приложений.

fastcgi.impersonate = 1
FastCGI позволяет процессу имперсонироваться используя контекст клиента, вызывающего процесс. Этот механизм работает только под FastCGI/IIS, на Apache на Windows это работать не будет.

short_open_tag = On
Большинство приложений используют короткие теги, поэтому лучше включить их поддержку.

display_errors = On
На время проверки и отладки PHP приложений на FastCGI лучше включить вывод сообщений об ошибках.

Третье. Высока вероятность, что после установки PHP одной из последних версий под стандартную XP с компонентой IIS 5 или 6 версии и прописывания файла php-cgi.exe как обработчика расширения .php Вы увидите вместо вывода скрипта следующее:

This PHP CGI binary was compiled with force-cgi-redirect enabled.  This
means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.
For more information as to why this behaviour exists, see the  http://php.net/security.cgi-bin manual page for CGI security.
For more information about changing this behaviour or re-enabling this webserver,
consult the installation file that came with this distribution, or visit 
http://php.net/install.windows the manual page.

Проблема состоит в том, что PHP последних версий предполагает, что Ваш сервер поддерживает технологию FastCGI.

К появлению PHP 5 серверные компоненты Internet Information Services указанных версий уже устарели, и для нормальной работы PHP 5 нужно установить FastCGI для IIS 6.0 и IIS 5.1, на момент написания заметки это была версия FastCGI 1.5.

По сути дела, FastCGI — интерфейс, развивающий классическую технологию CGI, служащую для установки протокола взаимодействия Web-сервера и приложения. Считается, что он, по сравнению с CGI, является более производительным и безопасным.

Итак, ставим PHP для Win32 в обычном порядке, выбираем IIS FastCGI, видим сообщение об ошибке со ссылкой http://www.iis.net/1521/ItemPermalink.ashx:

FastCGI is not installed on the current version of IIS

Перейдя по этой ссылке, загружаем FastCGI 1.5 for IIS 6 and 5.1:

FastCGI 1.5 for IIS 6 and 5.1

Всё устанавливается, и скрипты начинаются запускаться нормально.

Установка Web-платформы

Если Вы решили заодно обновить MySQL и увидели такое:

Cannot create Windows service for MySQL 5. Error: 0

это означает, что у Вас уже запущен процесс под именем mysql, например, старая версия сервиса.

Нажимаем Пуск, Администрирование, Службы, находим в списке MySQL и останавливаем её (правая кнопка мыши, выбрать Стоп). Если нет команды Администрирование - сначала включите её через настройки меню Пуск.

Затем переходим Пуск, Выполнить (или в командную строку файлового менеджера), набираем и выполняем

sc delete mysql

- это команда удаления служб из Windows, будьте с ней поосторожней!

После удаления службы, проверьте, что она не запущена (Пуск, Администрирование, Службы, службы mysql нет в списке) и перезагрузите компьютер.

Потом запускаем конфигуратор MySQL заново, он лежит по адресу [ПАПКА_MySQL]\bin\MySQLInstanceConfig.exe

Наконец, новые версии phpMyAdmin тоже могут капризничать под старенькой XP. Если увидели такое -

Произошла ошибка в работе механизма сессии. Проверьте файлы
 журналов PHP и/или Веб-сервера на наличие ошибок, и произведите 
их корректное конфигурирование.

то проверьте в php.ini настройку session.save_path - там должен быть прописан путь к временной папке, на которую есть полные права у гостевой записи Интернет и учётной записи для запуска IIS. Возможно, чего-нибудь придётся перезапустить, скажем, серверную службу.

Наконец, в последних версиях есть "полуавтоматическая" настройка phpMyAdmin:

http://localhost/phpmyadmin/setup/

Обратите также внимание, откуда именно подключается файл php.ini (в настройках, получаемых через phpinfo()) и на настройки в нем, задающие логин и пароль для коннекта к базе по умолчанию:

mysql.default_host = 'localhost';
mysql.default_user = 'root';
mysql.default_password = 'root';

Где MySQL физически хранит файлы с базами? Ответ в настройке datadir файла my.ini

Если остались папки с базами от прежних версий MySQL (а раньше они по умолчанию хранились по адресу [Папка_MySQL]\data ) - то можно просто перекинуть эти вложенные папки на новое место, имя папки совпадает с именем базы.

А вот с файлами ib_logfile*, ibdata* и прочими, лежащими в папке data, так делать не нужно. Не нужно и копировать и "служебные" базы данных с именами mysql, perfomance_schema.

Я так и сделал, всё заработало (после перезапуска службы MySQL). Увы, с какой-то из новых версий формат наверняка изменится, и тогда можно будет сделать через запрос вроде

RESTORE TABLE tbl_name [, tbl_name] ... FROM '/path/to/backup/directory';

Рейтинг@Mail.ru

вверх гостевая; E-mail
Hosted by uCoz