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 1.5 for IIS 6 and 5.1:
Всё устанавливается, и скрипты начинаются запускаться нормально.
Если Вы решили заодно обновить 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';
гостевая; E-mail |