Microsoft IIS 7.0 і вище

Цей розділ містить інструкції для ручного налаштування Internet Information Services (IIS) 7.0 і вище, для роботи з PHP на Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 та Windows Server 2008 R2. Інструкції налаштування для IIS 5.1 та IIS 6.0 на Windows XP і Windows Server 2003, знаходяться на сторінці Microsoft IIS 5.1 та IIS 6.0.

Підключення підтримки FastCGI в IIS

Модуль FastCGI початково відключений в IIS. Кроки для його підключення відрізняються в залежності від версії Windows.

Щоб включити підтримку FastCGI у Windows Vista SP1 та Windows 7:

  1. Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "optionalfeatures.exe" і клікніть "Ok";

  2. В діалоговому вікні "Компоненти Windows" розкрийте "Служби IIS", "Служби Інтернета", "Компоненти Розробки Застосунків", і поставте галочку навпроти "CGI";

  3. Клікніть OK та зачекайте завершення інсталяції.

Включення підтримки FastCGI для IIS7 на Windows Vista SP1 та Windows 7

Включення підтримки FastCGI у Windows Server 2008 та Windows Server 2008 R2:

  1. Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "CompMgmtLauncher" та клікніть "Ok";

  2. Якщо роль "Веб-сервер (IIS)" не представлена в розділі "Ролі", то додайте її клікнувши "Додати Ролі";

  3. Якщо роль "Веб-сервер (IIS)" представлена, то клікніть "Додати Роль Служби" і тоді поставте галочку навпроти "CGI" в групі "Компоненти Розробки Застосунків";

  4. Клікніть "Далі" а потім "Встановити" та почекайте завершення інсталяції.

Включення підтримки FastCGI на Windows Server 2008 та Windows Server 2008 R2

Конфігурування IIS для обробки PHP-запитів

Скачайте та встановіть PHP у відповідності до інструкцій описаних на сторінці Ручне Встановлення

Зауваження:

При використанні IIS, рекомендується вибирати збірку PHP "Non-thread-safe". Ця збірка доступна на сторінці » PHP для Windows: Бінарники та Сирці.

Приклад #1 Налаштування CGI та FastCGI в php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

В IIS підключити PHP можна або за допомогою інтерфейса для управління IIS (Менеджера Управління IIS), або використовуючи інструмент командного рядка.

Використання Менеджера Управління IIS для підключення PHP

Потрібно пройти наступні кроки:

  1. Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "inetmgr" та клікніть "Ok";

  2. В інтерфейсі Менеджера IIS виберіть пункт "Сервер" в дереві "Підключення" (англ. Connections);

  3. На сторінці "Огляд Можливостей" (англ. Features View) відкрийте "Співставління Обробників" (англ. Handler Mappings);

    Співставлення обробника IIS для PHP: Пошук Мапінгу Обробників

  4. На панелі "Дії" (англ. Actions) клікніть "Додати Співставлення Модуля..." (англ. Add Module Mapping);

  5. В діалоговому вікні, що з'явилось зробіть наступне:

    • Через кому, шляхи запитів, які потрібно обробляти. Накриклад, якщо потрібно обробляти всі файли з розширенням .php введіть: *.php
    • В полі "Модуль" введіть: FastCgiModule
    • В полі "Виконавчий файл" (англ. Executable) введіть: C:\[Шлях до папки, де встановлено PHP]\php-cgi.exe
    • В полі Ім'я (англ. Name) введіть: PHP_via_FastCGI

  6. В цьому ж діалоговому вікні клікніть кнопку "Обмеження Запитів" (англ. Request Restrictions), а потім на закладці "Співставлення" (англ. "Mapping") виберіть варіанти, коли саме потрібно викликати даний обробник;

  7. Після чого натискайте кнопки OK у всіх діалогових вікнах, щоб зберегти конфігурацію.

Співставлення обробників IIS для PHP: Додавання Мапінгу Обробників

Використання командного рядка для підключення PHP

Використовуйте команду показану нижче для створення пулу процесів IIS FastCGI, який буде використовувати виконавчий файл php-cgi.exe для обробки PHP-запитів. Замініть значення для параметра fullPath на абсолютний шлях до файла php-cgi.exe.

Приклад #2 Створення пулу процесів IIS FastCGI

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath='c:\PHP\php-cgi.exe']

Сконфігуруйте IIS для обробки PHP-запитів, виконавши команду показану нижче. Замініть значення параметра scriptProcessor на абсолютний шлях до файла php-cgi.exe.

Приклад #3 Конфігурування IIS для обробки PHP

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

Ця команда створює співставлення для IIS між файлами з розширенням *.php та програмою, яка їх повинна обробляти. В результаті - всі URL, які закінчуються на .php будуть оброблятись через модуль FastCGI.

Зауваження:

Це останнє необхідне налаштування, далі йдуть необов'язкові інструкції, але вони є рекомендованими для досягнення оптимальної функціональності та продуктивності PHP на IIS.

Уособлення та доступ до файлової системи

Використовуючи IIS, рекомендується в PHP підключити уособлення FastCGI. Воно контролюється директивою fastcgi.impersonate у файлі php.ini. Коли уособлення включено, PHP буде виконувати всі операції на файловій системі від імені облікового запису користувача, якого визначено через систему автентифікації IIS. Це гарантує, що навіть коли один і той самий PHP-процес є спільним для різних веб сайтів, PHP-скрипти, на цих сайтах, не зможуть отримати доступ до файлів один одного, до поки відрізнятимуться їх облікові записи на кожному із цих сайтів в системі автентифікації IIS.

Наприклад в IIS 7, початково, включено анонімну автентифікацію, для якої використовується спеціальний вбудований обліковий запис користувача IUSR. Це означає, що для того, щоб IIS виконав PHP-скрипт, необхідно щоб користувач IUSR мав права на читання цього скрипта. Якщо PHP-скрипт повинен виконати певні операції над конкретним файлом або записати файл в певну папку, то користувач IUSR повинен мати права на ці дії.

Щоб призначити певний обліковий запис користувача для такої анонімної автентифікації в IIS 7, використовуйте наступну команду. Замініть початкову назву сайта "Default Web Site" на назву вашого сайта. У виведеному XML-елементі конфігурації знайдіть атрибут userName.

Приклад #4 Визначення облікового запису, який буде використовуватись як анонімна сутність IIS

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

Зауваження:

Якщо атрибут userName не представлено в елементі anonymousAuthentication, або він має пустий рядок, то це означає, що сутність пулу застосунку використовується в якості анонімної сутності для цього веб-сайта.

Щоб змінювати права на файли та директорії, використовуйте команду icacls або звичайний інтерфейс Windows Explorer - тобто клікніть правою кнопкою миші на директорії або файлі та виберіть пункт "Властивості" (англ. Properties), після чого перейдіть на вкладку "Безпека" (англ. Security) та встановіть потрібні права.

Приклад #5 Конфігурування прав доступів використовуючи команду icacls

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Встановлення index.php як початкового документа для IIS

Початковий документ використовується для HTTP-запитів, в яких не зазначено назву документа (а тільки назву директорії або й без неї). В PHP-застосунках для цих цілей, зазвичай, використовується index.php. Щоб додати index.php в якості початкового документа для IIS, використовуйте цю команду:

Приклад #6 Встановлення index.php як початкового

%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
/commit:apphost

Конфігурування Повторного Використання FastCGI та PHP

Сконфігуруйте налаштування IIS FastCGI для повторного використання PHP-процесів, за допомогою команди показаної нижче. Налаштування FastCGI instanceMaxRequests контролює - як за багато запитів буде оброблятись одиночним процесом php-cgi.exe перед тим, як IIS його видалить. Змінна оточення PHP PHP_FCGI_MAX_REQUESTS контролює - як за багато запитів може оброблятись одиночним процесом php-cgi.exe перед тим, як він почне свій новий цикл (перезапуститься). Переконайтесь, що значення вказане для FastCGI InstanceMaxRequests є меншим або рівним значенню вказаному для PHP_FCGI_MAX_REQUESTS.

Приклад #7 Конфігурування Повторного Використання FastCGI та PHP

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Налаштування FastCGI-таймауту

Збільшіть таймаут для FastCGI, якщо очікується тривала робота PHP-скриптів. Є два параметри, що контролюють таймаут - це activityTimeout та requestTimeout. Використовуйте команди, показані нижче, щоб змінити налаштування таймауту. Не забудьте замінити значення для параметра fullPath, щоб він містив абсолютний шлях до файла php-cgi.exe.

Приклад #8 Конфігурування FastCGI-таймауту

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

Зміна розташування файла php.ini

PHP шукає файл php.ini в декількох місцях, а тому можна змінити початковий шлях для файла php.ini, використовуючи змінну оточення PHPRC. Щоб повідомити PHP, що треба завантажувати конфігураційний файл з нового місця, запустіть команду, наведену нижче. Також потрібно вказати абсолютний шлях до директорії з файлом php.ini як значення для змінної оточення PHPRC.

Приклад #9 Зміна розташування файла php.ini

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\Some\Directory\']" /commit:apphost

add a note add a note

User Contributed Notes 6 notes

up
36
Aditya
10 years ago
To resolve the error "The FastCGI process exited unexpectedly" install the below package:

To fix it I had to install the Visual C++ Redistributable for Visual Studio 2012 Update 3

http://www.microsoft.com/en-us/download/confirmation.aspx?id=30679
up
27
sedativchunk at gmail dot com
9 years ago
This might be an incredibly stupid comment, but I thought I would share anyway. If you want to install PHP on Windows Server in one click without all the hassle above, simply go here to the official IIS website:
http://php.iis.net

Run the install, boom, PHP works on your IIS/Windows server! No command prompt windows, no messing with settings, everything is pre-configured. I followed all the steps on this page and I could not get PHP working for anything. When I was about to give up, I found that link where the official Microsoft installer made it stupidly easy.

Use it, save your time and get back to work faster.
up
2
psch3 at gmx dot net
8 years ago
I want to share the solution to a problem I wasted a couple of hours on:

I have some scripts that run for several minutes, they calculate lots of things. I got an error 500. The reason is not the PHP-time-limit, but the timeout of the IIS-FastCGI-setting. Unfortunately I have the German version, I guess the setting translates to "activity timeout" and "request timeout". Just increase the values.

And a 2nd problem: When one of those scripts was running, the server would refuse to process other "quick" scrips at the same time. So normal users would have to wait MINUTES just because a kind of admin-user is running the long script. There is another setting for FastCGI: max number of instances (again, translated!). The setting was 0, which means that IIS decides automatically. Obviously, that was a bad idea. I set it to 4 and now everything is fine.

I hope that helps someone. It may sound obvious, but coming from an old ISAPI-installation, those problems where rather new to me.
up
4
matteo dot alvazzi at gmail dot com
9 years ago
It's a bit silly, but it's worth writing it down, as there will be a day you'll have to configure php on IIS in a Preproduction via VPN with a really pushing customer and only few minutes available...  and somehow you WILL forget this.

Php.ini by default has the short code set to off, so if you configure everything and test it out with <? phpinfo() ?> you will a blank screen with the code in the source, which can also indicate that there is something wrong in the configuration and that the script doesn't get sent to the php processor. It's not, it's correct! Just test out with <?php phpinfo(); ?> or turn on the short codes!
up
4
Bradford Plummer
10 years ago
If you get an error running the second command in Example 7 try this instead:

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='C:\php\php-cgi.exe'].environmentVariables.[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Be sure to change the path to the php-cgi.exe file if it is not at C:\php\.

Good luck.
up
4
NG
11 years ago
Example #9 fails unless I change "php.exe" to "php-cgi.exe" as follows:

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php-cgi.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\PHP\']" /commit:apphost
To Top