Utilizar PHP en Internet Information Server 7

Windows 7 utiliza servidor web IIS 7 cuya configuración es bastante diferente a la de versiones anteriores por lo que en ocasiones resulta difícil activar PHP para ser utilizado por el servidor web. David Wang, experto de Microsoft, ha preparado un script para ejecutar como archivo por lotes desde el Símbolo de Sistema con privilegios de Administrador que realiza por nosotros el trabajo necesario para habilitar PHP en IIS 7.

Los pasos detallados son:

  1. Instalar IIS 7 desde Panel de Control >> Programas >> Cambiar opciones de Windows (no parece necesario modificar las opciones por defecto de la instalación)
  2. Instalar PHP 5 en C:InetpubPHP (siendo C: el disco o partición en que está instalado Windows), de esta manera se aprovechan los privilegios de listas ACL del directorio Inetpub y se evitan errores posteriores con los permisos
  3. Crear con el bloc de notas un archivo por lotes con extensión *.BAT que contenga el texto propuesto por David Wang (hay que ejecutar el archivo por lotes con privilegios de Administrador).
REM Las 2 primeras líneas corresponden a la instalación de PHP en el directorio recomendado

REM Por eso vienen comentadas con REM (no se ejecutan)

REM MKDIR %SYSTEMDRIVE%\Inetpub\PHP

REM ECHO Extract PHP files from ZIP archive into %SYSTEMDRIVE%\Inetpub\PHP

COPY /Y %SYSTEMDRIVE%\Inetpub\PHP\PHP.INI-Recommended %SYSTEMDRIVE%\Inetpub\PHP\PHP.INI

PUSHD %SYSTEMROOT%\System32\inetsrv

APPCMD SET CONFIG -section:handlers -+[name='PHP',path='*.php',verb='GET,HEAD,POST',modules='IsapiModule',scriptProcessor='%SYSTEMDRIVE%\Inetpub\PHP\php5isapi.dll',resourceType='File']

APPCMD SET CONFIG -section:isapiCgiRestriction -+[path='%SYSTEMDRIVE%\Inetpub\PHP\php5isapi.dll',allowed='true',groupId='PHP',description='PHP5']

POPD


David Wang tiene otra versión más compleja del script, puedes probar con este si el anterior no da resultado:

@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