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 :)

If you are wondering what’s the minimum amount of RAM required by a single physical HYPER-V server to host your VMs, you can use the following calculator I wrote using simple JavaScript.
The configuration is based on Microsoft’s best practice documentation for HYPER-V Host to achieve optimum memory performance.

How many virtual machine are you planning to have in your host?

I recently migrated 2 of our Windows 2000 Box to WIndows 2008 R2, running IIS7.5. One day one of our web developers was reporting that changes that he made on his PHP files will not display right away on a web browser. There is about 15-30 seconds delay between right after he hit CTRL-S(to save) the php file and when the changes appear on a web page. This can be very annoying when you are debugging codes.

I need to make sure that this is not a browser problem. So, I:

  • had 2 browsers(IE and chrome) opened up with cleared private data(cache, cookies, and all the good stuff).
  • ran the php page on chrome
  • edit the php page and save
  • refreshed chrome….. changes are not displayed
  • immediately run the same php page on IE, which still has cleared private data and still hasn’t been used for browsing anything. Changes are still not appearing.

I then waited for about 25 seconds, and refresh both browsers, and immediately see the changes. I know this has got to be server settings.

First thing that comes in mind is WinCache extension for PHP. Which is recommended by Microsoft to speed PHP execution. After looking at the documentation for this extension, it sounds like the wincache.chkinterval setting is the culprit. The documentation mentioned that this can be changed in PHP.INI. The default settings is 30 seconds, which makes me more suspicious of this entry.

So I added the following entry under Module Settings in my php.ini file, which change the check interval settings to 1 second, instead of 30:

; Module Settings ;
wincache.chkinterval = 1

After IIS apply the settings, that seems to have fix it. My colleague is back to happy zone again :)