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
Цей розділ містить інструкції для ручного налаштування 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. Кроки для його підключення відрізняються в залежності від версії Windows.
Щоб включити підтримку FastCGI у Windows Vista SP1 та Windows 7:
Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "optionalfeatures.exe" і клікніть "Ok";
В діалоговому вікні "Компоненти Windows" розкрийте "Служби IIS", "Служби Інтернета", "Компоненти Розробки Застосунків", і поставте галочку навпроти "CGI";
Клікніть OK та зачекайте завершення інсталяції.
Включення підтримки FastCGI у Windows Server 2008 та Windows Server 2008 R2:
Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "CompMgmtLauncher" та клікніть "Ok";
Якщо роль "Веб-сервер (IIS)" не представлена в розділі "Ролі", то додайте її клікнувши "Додати Ролі";
Якщо роль "Веб-сервер (IIS)" представлена, то клікніть "Додати Роль Служби" і тоді поставте галочку навпроти "CGI" в групі "Компоненти Розробки Застосунків";
Клікніть "Далі" а потім "Встановити" та почекайте завершення інсталяції.
Скачайте та встановіть 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), або використовуючи інструмент командного рядка.
Потрібно пройти наступні кроки:
Натисніть поєднання клавіш Win+R, потім у вікні, що з'явилось, введіть "inetmgr" та клікніть "Ok";
В інтерфейсі Менеджера IIS виберіть пункт "Сервер" в дереві "Підключення" (англ. Connections);
На сторінці "Огляд Можливостей" (англ. Features View) відкрийте "Співставління Обробників" (англ. Handler Mappings);
На панелі "Дії" (англ. Actions) клікніть "Додати Співставлення Модуля..." (англ. Add Module Mapping);
В діалоговому вікні, що з'явилось зробіть наступне:
В цьому ж діалоговому вікні клікніть кнопку "Обмеження Запитів" (англ. Request Restrictions), а потім на закладці "Співставлення" (англ. "Mapping") виберіть варіанти, коли саме потрібно викликати даний обробник;
Після чого натискайте кнопки OK у всіх діалогових вікнах, щоб зберегти конфігурацію.
Використовуйте команду показану нижче для створення пулу процесів 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)
Початковий документ використовується для 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
Сконфігуруйте налаштування 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, якщо очікується тривала робота 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 шукає файл 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
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
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.
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.
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!
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.