I recently stumbled upon a PHP page that keeps timing out, even after increasing the activityTimeout value in IIS7.5. The error message was “The FastCGI process exceeded configured activity timeout”. This leads me to writing this how to. If you are not interested in installing PHP, you can jump right to bullet point 7.3 and on.

If you are using IIS7 or 7.5, the best practice recommended by Microsoft is to use the Web Platform Installer(WPI). While this makes installation quick and easy, it really lack an option I desperately need. It never asked me where to store the PHP installation. It assume I want to install it under <%system%>\Program Files\PHP. What if I can NOT or do NOT want to store it in that folder??

NOTE: <%system%> is the drive letter where you install your Windows Operating System to.

The easiest way is to let WPI install it, and we’ll just worry about modifying the installation.

  1. Install PHP using WPI
  2. Stop your web server(IIS)
  3. Move the PHP folder from <%System%>/Program Files to any Location you wish. For this example, I’m moving it to E:\, so that my PHP installation is in E:\PHP
  4. Change your environment(system) variable(Right click on computer, Properties, Advanced system settings, Advanced tab, Environment variables). If you can’t find any entry that points to the default PHP install location, you can skip this step.
    • Double Click on Path, and change every reference to <%System%>/Program Files/PHP to E:\PHP
    • Double click on PHPRC, and do the same thing
    • If you see anything else that refers to <%System%>/Program Files/PHP, change them all to E:\PHP.
    • Environment Variables

      Environment Variables

  5. Change your php.ini settings. Locate your php.ini file and look for <%System%>/Program Files/PHP entry. Change them all to E:\PHP.
  6. Now you need to tell IIS to use the PHP executable from a different location(as opposed to from <%System%>/Program Files/PHP) to process PHP file request.
    • Launch your IIS manager, and click on the ROOT entry just right under Start Page.
    • Double click on Handler Mappings, and locate *.php entry under Path. If you are using WPI, there should be an entry called PHP_via_FastCGI
    • Handler Mappings

      Handler Mappings

    • Double click on it, and change the executable path to use the PHP-CGI.exe file in E:\PHP\
    • If you have sites defined, make sure you check the module settings for each site. Changing the root should take care all the Sites, but it never hurts to double check
  7. Change your IIS configuration. You can either use the IIS admin pack(built in in IIS7.5), or you can edit the configuration file directly.
    1. Open C:\Windows\System32\inetsrv\config\applicationHost.config file with a notepad
    2. Look for <%system%>/Program Files/PHP entry, and change them all to E:\PHP
    3. locate <fastCgi> tag. Make sure you only have one <application> tag defined for your PHP installation. If you are seeing two <application> tag entry for PHP, remove the one that contains less text, and make sure the one that stays has a fullPath attribute of E:\PHP\php-cgi.exe(or whatever your path is).

What happened to me prior to this post was, I did all the steps through steps 6, but i didn’t do step 7. A web developer was complaining that his debugger keep timing out after 70 or so seconds. I set the timeout period to a lot more than 72 seconds, but it didn’t seem to take it. I found out that the application path is still pointing to the default installation of PHP in <%system%>/Program Files, and there are 2 <application> tag entries for PHP installation. The first one was the default installation entry, the second was the custom path entry(in E:\PHP). I changed the activityTimeout property of the first <application> tag entry. No wonder it didn’t work the first time I tried it. After deleting the second entry, and modifying the first one, the debugger session stays longer than 72 seconds, and my web developer is back to happy zone again :)