Installing PHP 5 on IIS in 5 simple steps

Categories:

Set the PHP Application Mapping in IIS

Before IIS will parse PHP scripts, you must first create an application mapping for PHP. This application mapping basically tells IIS what ISAPI dll, or CGI executable to use to process files of a certain file extension (in this case .php). There are two ways in which we can do this, via the command line or via the IIS MMC snap in. I'm going to show you how to do both.

As this is a universal PHP installation guide for IIS 5.0, 5.1 and 6.0 there are limited universal ways in which to add the PHP application mapping via the command line. What ever you do though do not use the adsutil.vbs script to try and add you PHP application mapping, at least not without understanding it's limitations. When you add/delete an application mapping with adsutil.vbs there is no way you can add/delete a single item at a time. So by using adsutil.vbs to add an application mapping you will effectively delete every other mapping at that level. However, what you can do is use David Wang's awesome chglist.vbs script to add the PHP application mapping without effecting existing mappings. You can download this script from David's old blog or from the bottom of this page. Once you have saved the script, simply open a command window and change into the directory that contains your script and type this in;

chglist.vbs W3SVC/ScriptMaps "" ".php,D:\PHP\php5isapi.dll,5" /INSERT /COMMIT

This will add the PHP ISAPI script map to the root of the IIS metabase, and any sites created after adding this script will automatically inherit it. If you want to add the PHP application mapping to a specific website then you will need to modify the W3SVC/ScriptMaps section of the command to suite. If none of this makes sense at all, don't worry because all this can be done using the GUI as well which we will cover now.

  • Open the IIS MMC and right click on the Web Sites container (or click on any specific website you wish to add PHP to) and select the properties menu item


figure 6

  • Once the Web Sites Properties window opens select the Home Directory tab and click the Configuration button as shown below in figure 7.


figure 7

  • This will bring you to the Application Configuration window. Click the Add button at the bottom to add the PHP application mapping as shown below in figure 8.


figure 8

  • In the Extension field enter .php and then click on the browse button in the top right and select the php5isapi.dll file from inside you PHP installation directory (e.g D:\PHP). The default is to accept all verbs, but if you wish you can limit the verbs to tighten security for you PHP application mapping. Ensure that the Script engine and Check that file exists options as ticked and then press ok until you exit the properties windows.


figure 9

That is it, IIS should now be configured to serve PHP content. There is one exception though and that is if you are using IIS 6 then you will also need to configure a Web Extension, so if you are using IIS 5.0 or 5.1 you can proceed onto the next section. You can set the Web extension via command line using iisext.vbs or via the Gui. Using the iisext.vbs at the command prompt you'll need to type in this, but be sure to change the path to php5isapi.dll to suit your environment ;

iisext.vbs /AddFile D:\php\php5isapi.dll 1 PHP5ISAPI 1 "PHP 5 ISAPI"

To add the extension via the GUI, read on;

  • Open the IIS MMC and expand the server tree. Right click on the Web Service Extensions option and select the Add a new Web service extension option.


figure 10

  • In the Extension name field put in a descriptive name, such as PHP 5 ISAPI as shown below in figure 11. Make sure the Set extension status to Allowed option is checked and then click the Add button.


figure 11

  • In the Add file window click the Browse button and navigate to your PHP installation directory and select the php5isapi.dll file as shown below in figure 12. Then click the ok button until you exit back into the IIS MMC.


figure 12

All done, now your IIS 6 web server is all set to serve PHP content.

Comments

Anonymous's picture

This doesn't work.

This doesn't work.

Brashquido's picture

What version of PHP?

For PHP 5.2.x these install instructions certainly do work, however as per any installation instructions an assumption is made of a clean target environment as there is no way any install guide can account for all variations of system configurations out there. If you are using PHP 5.3.x this guide won't help you (as noted in bold on the first page). If using PHP 5.2.x then I suggest you clean off your system and try again. Also make sure you are using the threadsafe version of PHP for use with this guide.

----------------
Dominic Ryan
6 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster

Anonymous's picture

php5isapi.dll problem

I get stuck into 2 problems.

1. php5isapi.dll is missing (i can't find this dll in the php pakage C:\PHP )

2. When i reach this step:

" In the Extension field enter .php and then click on the browse button in the top right and select the php5isapi.dll file from inside you PHP installation directory (e.g D:\PHP). The default is to accept all verbs, but if you wish you can limit the verbs to tighten security for you PHP application mapping. Ensure that the Script engine and Check that file exists options as ticked and then press ok until you exit the properties windows. "

...the ok button is disabled, that means i can not press ok to add an application extension mapping.

any solution for this?

i must mention that i use windows xp sp3, iis 5.1 i think and PHP 5.2.14

Brashquido's picture

For PHP ISAPI you must NOT use the NTS version

If you are using PHP 5.2.14 and you are unable to find the php5isapi.dll file anywhere in your extracted PHP files, then you have downloaded the non thread safe version of PHP. To use ISAPI you MUST download the thread safe version, i.e. this one. This will also probably be the cause of your second issue as you cannot add an application mapping without specifying a DLL or executable file to handle the mapping that you are making. Also make sure you are logged on with Administrative permissions. Be sure to delete all your PHP files before switching from the non thread safe binaries to the thread safe binaries. These binaries are not interchangable, and if you get them mixed up then PHP/IIS will start crashing.

----------------
Dominic Ryan
6 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster

Anonymous's picture

Running phpinfo.php displays the contents of phpinfo.php

Hi Ryan,

This is a strange problem after I installed PHP following the steps you mentioned in the article. When I run the URL: http://localhost/php/phpinfo.php, it shows the contents of the phpinfo.php file in the browser:

<?php
phpinfo
();
?>

Any idea why does it happen?

Thanks
Shobhit Sinha

Anonymous's picture

HTTP 500 error

The above worked by adding .php in Mappings. I could see the PHP configuration page. But suddenly after sometime, it started giving HTTP 500 error when phpinfo.php was accessed.

I checked your previous post and tried that fastcgi.impersonate = 0; does not solves the problem.

Please help.

Thanks

Shobhit Sinha

Brashquido's picture

Look at the trouble shooting guides

Hi Shobhit,

There are quite a few configuration items that can cause HTTP 500 errors, so my advice would be to first have a read through my trouble shooting guide for PHP HTTP 500 errors as well as all the comments.

----------------
Dominic Ryan
6 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster

Anonymous's picture

Great Article

Hi Ryan,

I could resolve the HTTP 500 issue by simply following the steps in your article once again. Everything worked out just nicely thereafter.

Thanks
Shobhit Sinha

Anonymous's picture

thanks

after a lot of search and step by step in many web site this is the only one where i find the good and best solution tahnks a lot

Anonymous's picture

CGI error or the PHP test file propmts for download

Hi.. I am new to all this.. used IIS 5.1 and installed the PHP.. however i could not find this in the package..
"php5isapi.dll"... trying to map it to all the different .exe files(php-cgi.exe, php.exe) either will result in CGI time out error for which i have already set the timeout option as found on net.. or it prompts for download of the info file.. can't seem to get around this... just downloaded the 'php5isapi.dll' hope mapping to this works...
thanks..