A couple of months ago, I wrote a quick and dirty entry on how to install PHP on IIS7. The main purpose of that entry was to explain the details of what was going on as well as cookie-cutter instructions of one way to successfully install PHP on IIS7.
Well, the responses that I have received from that blog entry made me realize that I need to provide something a little more shrink-wapped which does a few more things other than just run the bare minimum... because I was seeing way too many broken custom modifications coming from mistaken assumptions about PHP or IIS7.
Here it is, V2. Just copy/paste the following into a .bat file, right-click run it as elevated Administrator on Vista, and follow the prompted instructions. You should have PHP extracted into a directory of your choice before-hand (I favor and default to %SYSTEMDRIVE%\Inetpub\PHP for many aforementioned reasons; in my examples, I chose "C:\Program Files\P H P" to show it working with long pathnames).
The batch script:
Now, I am no PHP expert, so I can only give instructions for how to get PHP configured and running on IIS7. Questions about all other PHP-related features (like PHP extensions, integration with mySQL, etc) and how to get them working really belong on a PHP support forum.
Sample Execution Results:
David.Wang's Sample PHP/IIS7 Configurator Version: June 2006 ------------------------------ Summary ------------------------------ PHP Binaries Dir : C:\Inetpub\PHP PHP Binary Type : ISAPI PHP Binary Name : php5isapi.dll --------------------------------------------------------------------- Validating inputs... ERROR: PHP Binary "C:\Inetpub\PHP\php5isapi.dll" does not exist! Please first completely extract PHP to "C:\Inetpub\PHP" Remember to tweak PHP.INI for security and functionality per php.net Finished input validation. Press 1 to EDIT choices, or ENTER to start IIS modifications:1 Press ENTER to accept [C:\Inetpub\PHP], or provide new value (folder path) PHP Binaries Dir:C:\Program Files\P H P Press ENTER to accept [ISAPI], or provide new value (CGI or ISAPI) PHP Binary Type: Press ENTER to accept [php5isapi.dll], or provide new value (filename) PHP Binary Name: David.Wang's Sample PHP/IIS7 Configurator Version: June 2006 ------------------------------ Summary ------------------------------ PHP Binaries Dir : C:\Program Files\P H P PHP Binary Type : ISAPI PHP Binary Name : php5isapi.dll --------------------------------------------------------------------- Validating inputs... Remember to tweak PHP.INI for security and functionality per php.net Finished input validation. Press 1 to EDIT choices, or ENTER to start IIS modifications: Starting IIS7 Configuration... Copying "C:\Program Files\P H P\PHP.INI-Recommended" to PHP.INI... Setting PHP Handler... CONFIG object "system.webServer/handlers" changed Adding and Enabling PHP in ISAPI/CGI Restriction List... CONFIG object "system.webServer/security/isapiCgiRestriction" changed Finished IIS7 Configuration. Test installation using PHP file content of: <?php phpinfo();?>
David.Wang's Sample PHP/IIS7 Configurator Version: June 2006 ------------------------------ Summary ------------------------------ PHP Binaries Dir : C:\Inetpub\PHP PHP Binary Type : ISAPI PHP Binary Name : php5isapi.dll --------------------------------------------------------------------- Validating inputs... ERROR: PHP Binary "C:\Inetpub\PHP\php5isapi.dll" does not exist! Please first completely extract PHP to "C:\Inetpub\PHP" Remember to tweak PHP.INI for security and functionality per php.net Finished input validation. Press 1 to EDIT choices, or ENTER to start IIS modifications:1 Press ENTER to accept [C:\Inetpub\PHP], or provide new value (folder path) PHP Binaries Dir:C:\Program Files\P H P Press ENTER to accept [ISAPI], or provide new value (CGI or ISAPI) PHP Binary Type:cgi Press ENTER to accept [php5isapi.dll], or provide new value (filename) PHP Binary Name:php-cgi.exe David.Wang's Sample PHP/IIS7 Configurator Version: June 2006 ------------------------------ Summary ------------------------------ PHP Binaries Dir : C:\Program Files\P H P PHP Binary Type : cgi PHP Binary Name : php-cgi.exe --------------------------------------------------------------------- Validating inputs... ERROR: PHP CGI requires modifying cgi.force_redirect to 0 in "C:\Program Files\P H P\PHP.INI" Remember to tweak PHP.INI for security and functionality per php.net Finished input validation. Press 1 to EDIT choices, or ENTER to start IIS modifications: Starting IIS7 Configuration... Copying "C:\Program Files\P H P\PHP.INI-Recommended" to PHP.INI... Setting PHP Handler... CONFIG object "system.webServer/handlers" changed Adding and Enabling PHP in ISAPI/CGI Restriction List... CONFIG object "system.webServer/security/isapiCgiRestriction" changed Finished IIS7 Configuration. Test installation using PHP file content of: <?php phpinfo();?>
Enjoy.
//David
@IF ?%_ECHO%?==?? ECHO OFF SETLOCAL SET DIR_PHP_FROM=%SYSTEMDRIVE%\Inetpub\PHP SET PHP_TYPE=ISAPI SET PHP_MODULE=IsapiModule SET PHP_BINARY=php5isapi.dll :Menu ECHO. ECHO David.Wang's Sample PHP/IIS7 Configurator ECHO Version: June 2006 ECHO. ECHO ------------------------------ Summary ------------------------------ ECHO PHP Binaries Dir : %DIR_PHP_FROM% ECHO PHP Binary Type : %PHP_TYPE% ECHO PHP Binary Name : %PHP_BINARY% ECHO --------------------------------------------------------------------- REM REM Do some basic validations REM ECHO. ECHO Validating inputs... IF /I ?%PHP_TYPE%? NEQ ?CGI? IF /I ?%PHP_TYPE%? NEQ ?ISAPI? ECHO.&ECHO ERROR: Binary Type MUST be either CGI or ISAPI FOR %%I IN ( %PHP_BINARY% ) DO ( IF /I ?%PHP_TYPE%? EQU ?CGI? IF /I ?%%~xI? NEQ ?.exe? ECHO.&ECHO WARNING: Binary Type %PHP_TYPE% requires a CGI EXE binary IF /I ?%PHP_TYPE%? EQU ?ISAPI? IF /I ?%%~xI? NEQ ?.dll? ECHO.&ECHO WARNING: Binary Type %PHP_TYPE% requires an ISAPI DLL binary ) IF NOT EXIST "%DIR_PHP_FROM%\%PHP_BINARY%" ( ECHO. ECHO ERROR: PHP Binary "%DIR_PHP_FROM%\%PHP_BINARY%" does not exist! ECHO Please first completely extract PHP to "%DIR_PHP_FROM%" ) IF /I ?%PHP_TYPE%? EQU ?CGI? SET PHP_MODULE=CgiModule IF /I ?%PHP_TYPE%? EQU ?CGI? ECHO.&ECHO ERROR: PHP CGI requires modifying cgi.force_redirect to 0 in "%DIR_PHP_FROM%\PHP.INI" IF /I ?%PHP_BINARY%? NEQ ?php5isapi.dll? IF /I ?%PHP_BINARY%? NEQ ?php-cgi.exe? ECHO.&ECHO WARNING: Unrecognized PHP binary %PHP_BINARY% ECHO. ECHO Remember to tweak PHP.INI for security and functionality per php.net ECHO Finished input validation. ECHO. SET GO= SET /P GO=Press 1 to EDIT choices, or ENTER to start IIS modifications: IF ?%GO%? EQU ?? GOTO :Start ECHO. ECHO Press ENTER to accept [%DIR_PHP_FROM%], or provide new value (folder path) SET /P DIR_PHP_FROM=PHP Binaries Dir: ECHO Press ENTER to accept [%PHP_TYPE%], or provide new value (CGI or ISAPI) SET /P PHP_TYPE=PHP Binary Type: ECHO Press ENTER to accept [%PHP_BINARY%], or provide new value (filename) SET /P PHP_BINARY=PHP Binary Name: GOTO :Menu :Start REM REM Start Configuration REM IF NOT EXIST "%DIR_PHP_FROM%\%PHP_BINARY%" ( ECHO. ECHO ERROR: PHP Binary "%DIR_PHP_FROM%\%PHP_BINARY%" does not exist! ECHO Please first completely extract PHP to "%DIR_PHP_FROM%" GOTO :EOF ) ECHO. ECHO Starting IIS7 Configuration... ECHO. ECHO Copying "%DIR_PHP_FROM%\PHP.INI-Recommended" to PHP.INI... COPY /Y "%DIR_PHP_FROM%\PHP.INI-Recommended" "%DIR_PHP_FROM%\PHP.INI" >NUL PUSHD %SYSTEMROOT%\System32\inetsrv ECHO Setting PHP Handler... APPCMD SET CONFIG -section:handlers "-+[name='PHP-%PHP_TYPE%',path='*.php',verb='GET,HEAD,POST',modules='%PHP_MODULE%',scriptProcessor='%DIR_PHP_FROM%\%PHP_BINARY%',resourceType='File']" ECHO Adding and Enabling PHP in ISAPI/CGI Restriction List... APPCMD SET CONFIG -section:isapiCgiRestriction "-+[path='%DIR_PHP_FROM%\%PHP_BINARY%',allowed='true',groupId='PHP',description='PHP']" POPD ECHO. ECHO Finished IIS7 Configuration. ECHO. ECHO Test installation using PHP file content of: ^<?php phpinfo();?^> ENDLOCAL