SEARCH

How-To Geek

How to Install PHP on IIS 7 for Windows Server 2008

One of most popular development platforms on the web is PHP which powers many popular applications and sites such as Facebook, WordPress and Joomla. While most of these systems are ‘designed’ to be used on a Linux system running the Apache Web Server, you can deploy PHP applications via IIS 7 on your Windows Server 2008 system.

Configuring PHP

In order for Windows to run PHP code, the PHP binary files need to be copied to your system. No installation is required, however some configuration must be done in order for it to properly run. The first step is to download the PHP Windows Binaries and extract them (i.e. ‘C:PHP’). For IIS 7, the non thread safe binaries should be used.

image

Copy the ‘php.ini-production’ file from the extracted files paste it into the Windows directory. In the Windows directory, rename this file to ‘php.ini’.

image

Open the ‘php.ini’ file in Notepad and configure it as needed. Out of the box, the production configuration we copied is preconfigured for what the PHP Team feels is good for a production server. There are a few changes you will need to make to configure PHP for your IIS 7 system:

  • Uncomment and set the key, cgi.force_redirect = 0
  • Uncomment the key, fastcgi.impersonate = 1
  • Uncomment and set the key, extension_dir to the ‘ext’ folder in the path PHP was extracted to (i.e. ‘C:PHPext’).
  • Set the key, date.timezone to the time zone of your server (the URL on the line above this key lists the accepted values).

At this point, your Windows system can run PHP scripts from the command line using the ‘php.exe’ tool.

Configuring IIS 7 to Run FastCGI

Internet Information Services (IIS) 7 includes the FastCGI framework as part of the installation package. To make sure it is enabled in your IIS 7 installation, check the Role Services under Server Manager > Roles > Web Server.

image

Make sure the “CGI” option is installed under the “Application Development” section. If it is not, enable this feature and update your IIS 7 installation.

image

Once IIS is set, install the IIS 7 Administration Pack. If you do not use the “Typical” setup then make sure you have the “FastCGI” option set to install. This package installs the FastCGI configuration interface inside the IIS Manager.

image

Configuring IIS to Run PHP via FastCGI

Once IIS 7 is setup with all the required features, we just need to configure it to run PHP. First, we configure FastCGI to work with PHP under the “FastCGI Settings” option (this feature is installed as part of the IIS 7 Administration Pack).

image

In the FastCGI Settings screen, add an application.

image

Set the path to the ‘php-cgi.exe’ executable located in the folder where you extracted the PHP Windows binaries. Additionally, change the “InstanceMaxRequests” to a value higher than the default (i.e. 5000). Under the “EnvironmentVariables” setting, click the ellipses button to configure additional options.

image

Add a new variable named “PHP_MAX_REQUESTS” and set the value to the same amount as the “InstanceMaxRequests” setting above.

image

Apply all settings until you get back to the primary IIS Manager screen.

Next, we have to map how PHP scripts are executed by IIS which is configured in “Handler Mappings”.

image

In the Handler Mappings, add a new module mapping.

image

Set the module’s request path to PHP files (*.php) with the module interface “FastCgiModule”. Set the executable to the same file as what was configured in the FastCGI settings above. Assign a friendly name to this mapping, such as PHP, and click Ok.

image

When you get the confirmation prompt, answer “Yes” to confirm you want PHP to run as a FastCGI application.

image

Apply all your changes, close and restart IIS to make sure the new settings take effect.

image

Once this is done, there is a Microsoft hotfix available (a link is available in the links section) which addresses some issues with PHP when running under IIS 7. These should be installed on your web server to ensure PHP functions properly through FastCGI.

Testing PHP

At this point, your server is ready to go, but just to be sure we can confirm your PHP setup through IIS pretty easily. Create a text file in the directory ‘C:Inetpubwwwroot’ named ‘phpinfo.php’ which simply contains the line:

<?php phpinfo(); ?>

image

Finally, browse to the address: ‘http://localhost/phpinfo.php’ on your server and you should see the PHP information page. If the page loads successfully, PHP is now up and running on your machine.

image

Conclusion

Once you have PHP up and running on your Windows system, you can take advantage of the multitude of PHP based applications available as well as develop and deploy your own.

Links

Download PHP Windows Binaries (non thread safe)

Download IIS 7 Administration Pack

Download PHP Hotfix for IIS 7 FastCGI (x86 / x64)

Jason Faulkner is a developer and IT professional who never has a hot cup of coffee far away. Interact with him on Google+

  • Published 07/28/10

Comments (19)

  1. LJ

    I tried this out… and got this error:

    HTTP Error 500.0 – Internal Server Error
    An unknown FastCGI error occured

    Any ideas on why?

    Thanks!!!
    LJ

  2. Medium

    You need either the Microsoft Visual C++ 2008 Redistributable Package (x86) or the 65bit version, it all depends which PHP your using.. x86/x64

  3. Tom Thorogood

    Under “Request Restrictions” you should select File in the Mapping tab so iis will use the default 404 error page. Otherwise you’ll get “No input file specified.” for non existant php files.

    - Tom

  4. Sean O'Brien

    fyi… I tried this on W2k8 R2 SP1 with IIS 7.5 and it works fine. I got a compliled x64 php nts from here: http://www.anindya.com/php-5-3-5-x64-64-bit-for-windows/ and found that the IIS Admin Pack and the PHP Hotfix are not needed (Already included).

    Thanks for the directions/guide!

  5. Tchonialite

    @Tom Thorogood
    Thanks for your tip! It solved my problem!! :-)

  6. Am

    Thank you so much!!
    Just a quick question, is this going to work the same way for IIS 7 in Windows 7 (not just Windows Server 2008). I have been able to clear myself from the
    HTTP Error 404.3 – Not Found
    The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

    I was getting before adding MIME type .php application/x-httpd-php,
    And Handler as well.
    But I think PHP is not installed correctly (used both IIS Server and Apache Server and both don’t process the PHP, so there must be something wrong in that installation). Please suggest a fix you may have used or steps to check work?

  7. Jason Faulkner

    @Am – I am not really sure what you are asking, but to answer your first question, this should work on Windows 7 because it runs the same version of IIS as Server 2008.

  8. Am

    Thank you for your response. The problem is IIS7 in Windows 7 does’t allow you to configure Roles under Server Manager. It needs to connect to another remote machine. Not sure why they allow this in Server 2008 but not in IIS 7. I have followed all the other steps but still my PHP doesn’t work (last step still doesn’t execute PHP via IIS, it just displays the PHP code..

  9. Am

    I meant Server 2008 but not in *Windows 7*

  10. Jason Faulkner

    @Am – I have never configured PHP to run under Windows 7, but since you said it is displaying the code, go back to your earlier post and make sure you do not have a MIME type of text (or something similar) assigned to the .php extension. I do not believe you would need to have it mapped at all as a MIME type.

  11. Rodrigo

    Thanks, your article was very helpful.

  12. JP

    I followed the instructions exactly, but am getting a 404.3 error:

    HTTP Error 404.3 – Not Found

    The page you are requesting cannot be served because of the extension configuration. If the page is a script, add a handler. If the file should be downloaded, add a MIME map.

    Module: StaticFileModule
    Notification: ExecuteRequestHandler
    Handler: StaticFile
    Logon Method: Anonymous
    Logon User: Anonymous

    Could it be a permissions problem? Not sure what else it could be.

  13. JP

    (RE: last post about 404.3 error)

    I get this error when going to my test.php file locally, (http://127.0.0.1/redtopia/test.php) but not when I access it from the public side (http://www.redtopia.com/test.php). I triple checked the path and it should be working.

  14. cc

    works, but
    returns blank page?

  15. cc

    can you tell me why
    #?php phpinfo(); ?# works, but
    #? phpinfo(); ?# returns blank page?
    Thanks!

  16. TheDirtyBird

    Thank you very much!

  17. Aspasa

    Server 2008 R2

    http://localhost/phpinfo.php – Works

    http://localhost/contact-us.php – Displays Blank Page

    http://localhost/blog/wp-admin/installl.php – Displays Blank Page

    Microsoft Visual C++ 2008 Redistributable Package (x86) 64Bit is all installed.
    PHP 64 Bit installed from link above

    6 hours battling it out and still Blank Pages???

    Anyone? Please :) Thanks!

    Tested with

  18. KJohn

    Thanks for the walk-through. One thing to note, depending on how people add the php binaries to the server, ensure you provide sufficient privileges to the php folder! I was getting the following error:
    HTTP Error 500.0 – Internal Server Error An unknown FastCGI error occurred:
    and it took me quite a while to figure out the C:\php\ folder didn’t have minimum ‘read’ privileges for everyone.

  19. Rick

    This worked great for me! I had to get the x64 PHP nts as posted in a link by Sean O’Brien. I’m using 64-Bit Windows 2008 R2 Server with SP1

Get Free Articles in Your Inbox!

Join 134,000 newsletter readers

Email:

Go check your email!