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

Blank page

When I try test page phpinfo.php I can see only a blank page.
display_errors directive in php.ini is already turned on.
Any help please
Jos

Brashquido's picture

The only way I've ever being

The only way I've ever being able to reproduce the problem where PHP code shows up in the browser is when the PHP tags are missing, not correct, or the short tags directive not being enabled in php.ini in instances where code is using short tags. It seems that you do have you PHP tags there, so I would go back and double check that there are no spaces in the opening or closing tags.

Blank pages are slightly more common, and when doing a simple phpinfo test usually come about because the PHP application mapping has not being setup correctly. I'd suggest going back through the guide from step two and double check all your settings.
----------------
Dominic Ryan
3 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster

Anonymous's picture

php.log

HI!

This is a great instruction.
Everything is working except some things.
I am using PHP 5.2.4, IIS 5.1, XP Pro SP2.

I hate that, if i change anything in php.ini, i should restart the whole OS, but this is the smallest problem.

I did set up evertything as you sad:
in my php.ini:
display_errors=On
log_errors=On
error_log = "D:\PHP\log\php.log"

with theese settings, if i make an error in a file, the apache server write the php.log.
But not the IIS. My file is there, but when an error occured, that is not writing anything into the file >:(

Vaso

Brashquido's picture

Hi Vaso, You really

Hi Vaso,

You really shouldn't have to restart the OS for changes in php.ini. A restart of IIS should be enough here. As for your PHP log there are a few thing you could possibly check;

1) Have a look at your phpinfo page and make sure the correct path to you log is set.

2) You may need to grant the NTFS write permission to your log file for the IIS user account (IUSR_COMPUTERNAME).

3) Download the filemon utility and set it to monitor your log file which should give you a very good indication on where things are going wrong.

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

Anonymous's picture

THANK YOU!!!

I have been trying for days to get php5 installed on IIS5. It felt like a tried everything until I stumbled across this article. I followed the 5 easy steps and "wah lah" it worked. You are awesome. Thank you very much!!!

Anonymous's picture

:D

Yeeeeeeeeeeeeeeees
Finaaly!

Anonymous's picture

Hello there...

I have been tired with the times i have tried installing php 5 and finally i was able to do it easily with your instructions and quite successfully i tested phpinfo() files as well. Thank you for that...but still i hav that problem of opening files as to download when they are being tried to open via an html file... for eg : i want to open a run a php script which is written in a file called result.php and need to run in when the submit button of html page is pressed. but here as it is clicked it tries to download the file rather than running the script. i checked the mapping as u said and in the add filter i tried adding php but it says its not loaded and thats not working fine... what should i do to solve this problem.
please help me...

Brashquido's picture

First, PHP should not be

First, PHP should not be loaded as a filter, it should be loaded as an application mapping. I recommend having a look at the "Set the PHP Application Mapping in IIS" section again. What happens if you access this results.php file directly rather than calling it via your form?
----------------
Dominic Ryan
3 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster

Anonymous's picture

Http 500 error message for

Http 500 error message for all php pages... i installed in the same way as u said...

Brashquido's picture

500 is an internal server

500 is an internal server error, so there must be something amiss with your PHP environment. Can you check;

1) Make sure there are no spaces in the path in your PHP application mapping.

2) Did you add PHP to your PATH variable

3) Did you create the PHPRC variable?

4) What PECL extensions do you have enabled?

5) Are you able to execute a simple phpinfo page as described in the guide?
----------------
Dominic Ryan
3 x Microsoft IIS MVP, MCSE, MCSA
IIS Aid owner/webmaster