Instalación PHP en Windows 2003 con FastCGI Extension y con soporte a SQL 2008 R2

En realidad este post ya no debería de escribirlo, pues Windows 2003 ya esta fuera de soporte por parte de microsoft y ya va en via de desaparecer, pero aun muchos en el mundo utilizan Win 2003 y necesitan este tipo de configuración!!!

Mi necesidad se basa en que hay un aplicativo específico que uso y funciona muy bien en Windows 2003 R2 x64 y si no lo migro a Windows 2008/2012 este se pone muy pero muy lento, asi que para que hacerme problema, lo reinstalo de cero en un  servidor Win2003 que si anda muy bien.

Manos a la obra:

Suposiciones:

  • Ya tienes corriendo Windows 2003 R2 x64 con SP2
  • Tienes instalado el IIS 6.o

Ojo: antes de instalar aplicaciones x86 en servidores x64 hay que decirle a windows que pueda ejecutar programas de 32 bits, para esto y dependiendo de la version de windows tienen que ejecutar el siguiente comando dentro del command prompt (Inicio->Ejecutar->cmd) (a mi me funciono esto)

cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1

Caso contrario les va a aparecer el siguiente mensaje: (“%1 is not a valid Win32 application.“)  aqui les dejo el KB de Microsoft que habla sobre este problema: http://support.microsoft.com/kb/894435

Instalación de PHP 5.3.27

Actualmente existe la versión 5.4 y 5.5 de php pero a pesar que he tratado de instalarlo no he podido hacerlo funcionar con el soporte para SQL 2008, pero si tu objetivo es solo instalar PHP 5.4 o 5.5 estas instrucciones son validas.

1.- Descargar de la web de php la version mencionada, para eso vamos al siguiente link: http://windows.php.net/download/#php-5.3 para nuestro caso y siempre los binarios y la version Non Thread Safe ojo es muy importante recordar esto, pues de esto dependerá las librerias que vamos a activar.

php-mssql-2003-1

2.- Desempaquetar el archivo y colocar todos los archivos dentro de la carpeta c:\php

php-mssql-2003-2

3.- Modificar el archivo “c:\php\php.ini-production”, este archivo primero hay que renombrarlo a “php.ini” y luego modificar los siguientes parametros para que sea ejecutado por “FastCGI Extension” . (La idea es: que cuando el servidor reciba peticiones de paginas con extencion .php, estan sean pasadas a la extención FastCGI y esta las procese, de esta manera descongestionamos el servidor con este tipo de solicitudes ver mas detalles aqui).

  • Descomentar (quitarle el punto y coma”;”) y establecer la llave  cgi.force_redirect = 0
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, fastcgi.impersonate = 1
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, extension_dir a la carpeta ‘ext’, en nuestro caso c:\php\ext
  • Descomentar (quitarle el punto y coma”;”) y establecer la llave, date.timezone a la zona horaria de tu pais.

4.- Copiar  el archivo php.ini modifcado a la carpeta de C:\Windows

php-mssql-2003-3

 

5.- Instalación de FastCGI extención en IIS6

php-mssql-2003-4

6.- Configuración de FastCGI extencion

la configuración es bastante simple, pero a veces por algun motivo no funciona solo modificando este archivo, por lo que les voy a dar 2 opciones para hacerlo:

  • Opcion 1.- Modificando el archivo C:\WINDOWS\system32\inetsrv\fcgiext.ini  .- Bien, aqui hay que modificar este archivo colocando al final lo siguiente:
[Types]
php=PHP
[PHP]
ExePath=C:\PHP\php-cgi.exe
InstanceMaxRequests=5000
EnvironmentVars=PHP_MAX_REQUESTS:5000

Bastaría con eso!!!!!, pero a mi me ha sucedido que colocando esto NO me funcionaba y me daba el siguiente error:

FastCGI Error
The FastCGI Handler was unable to process the request.
--------------------------------------------------------------------------------

Error Details:

Section [c:\php\php-cgi.exe] not found in config file.
Error Number: 1413 (0x80070585).
Error Description: Invalid index.
HTTP Error 500 - Server Error.
Internet Information Services (IIS)

Este error es muy comun y en la web encontras que la respuesta es modificar el archivo C:\WINDOWS\system32\inetsrv\fcgiext.ini  con los datos mencionado arriba!!!!… pero si ya lo hicimos!!! asi me paso 3 horas dandole vueltas hasta que por fin encontre algo que me saco del problema.

  • Opción 2.-  Si con la opcion 1 no pudiste hacer correr el FastCGI, la modificacion del archivo lo debes hacer con una linea de comandos. hacer lo siguiente:

a).-Inicio->Ejecutar->cmd

        cd c:\Windows\system32\inetsrv
        c:\Windows\system32\inetsrv>cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\php\php-cgi.exe"

Por algún motivo que desconozco, muchas veces FastCGI no reconoce lo que escribimos directamente sobre el archivo fcgiext.ini, pero al hacerlo por script todo anda bien!!!!!

PD. el resultado lo probaremos despues de terminar de configurar PHP.

 

7.- Configuracion de  IIS6 para correr PHP via FastCGI

Ahora viene lo mas facil, que es decirle al IIS 6 que toda solicitud de paginas PHP lo traslade a FastCGI y todo estará corriendo.

  • Abrir la consola de IIS6 y dirigirse a la sección “Web Service Extencion” y habilitar “FastCGI Handler” y ponerlo como “allowed” o permitido en español.
    php-mssql-2003-5
  • Luego,….. ir a propiedades de la carpeta “Web sites”, luego ir a la lengüeta “home directory” y presionar el botón “configuration”php-mssql-2003-6php-mssql-2003-7
  • Buscar el archivo fcgiext.dll y ponerlo como executable,…. en extencion colocar “.php” .. ver imagen
    php-mssql-2003-8Luego, cerrar todas ventanas y reiniciar el IIS
  • Para reiniciar ya sabemos que tenemos que colocar IISRESET dentro del command prompt
    php-mssql-2003-9

Bien, si hemos colocado todo esto ya deberiamos de tener corriendo PHP sobre Windows….

8.- Probando……

Hasta aqui, solo hemos configurado PHP bajo Windows 2003 nada mas……. Para probar creamos un archivo con extención php (test.php) en la siguiente ruta:  C:\Inetpub\wwwroot     y colocamos lo siguiente:

<?php
phpinfo();
phpinfo(INFO_MODULES);
?>

php-mssql-2003-10

Luego vamos a un navegador y lo ejecutamos (http://ip-de-servidor/test.php)….. si todo ha salido bien, debería de mostrarnos la siguiente pantalla:

php-mssql-2003-11

 

Hasta aqui……. ya tenemos instalado PHP en Windows 2003 R2 x64 y corriendo bajo FastCGI….. Ahora nos queda configurar para que  PHP pueda soportarconsultas SQL 2008, para esto hay que seguir los siguientes pasos.

 

 Instalación de librerias MSSQL en PHP

Bien, hasta el punto anterior si seguiste los pasos, ya debes de poder hacer consultas a paginas php dentro de tu server, por defecto esta versión ya viene activado las librerias MySQL, por lo que si deseas instalar algún programa q utilice este motor de BD ya lo puedes hacer…. pero si lo que necesitas es hacer consultas a una BD MSSQL 2008 no podrás, pues falta instalar y habilitar las librerías de este motor.

1.- Descargar las librerias de este sitio de Microsoft:

http://www.microsoft.com/en-us/download/confirmation.aspx?id=20098

Para nuestro caso escoger la version 2 que es la que da soporte a Windows 2003

php-mssql-2003-12

 

En realidad al ejecutar este archivo, va a desempaquetar en una carpeta que le indiques las librerias necesarias, luego hay que copiarlas dentro de la carpeta de extenciones de php…

2.- Una vez descargado, ejecutamos el archivo SQLSRV20.EXE y mandamos los archivos a una carpeta de nuestra elección

php-mssql-2003-13

 

3.- En la carpeta a donde hemos descomprimido vamos a encontrar las librerias que nos va a permitir conectarnos a MSSQL, para esto hay que tener mucho cuidado en elegir que librería utilizar.

php-mssql-2003-14

 

4.- RECUERDAN que en el punto 1 de la seccion anterior (Instalación de PHP 5.3.27) les mencione que se fijen que verion estabamos bajando de PHP??? pues bien, bajamos la versión  “Non Thread Safe” por lo tanto la librería que deberíamos utilizar será la que mencione “nts” y compilado con la versión VC9 (significa Visual C++ 9).

Entonces copiamos a la carpeta “c:\php\ext” los siguientes archivos: php_sqlsrv_53_nts_vc9.dll y php_pdo_sqlsrv_53_nts_vc9.dll(opcional)

php-mssql-2003-15

 

5.- Solo nos falta verificar 2 cosas muy simples dentro del archivo c:\php\php.ini

  • Que la llave extension_dir tenga como valor a “C:\PHP\ext\”
extension_dir="C:\PHP\ext\"
  • Al final del archivo dentro de la seccion extenciones habilitar las librerias como extenciones colocando el siguiente valor
[PHP_SQLSRV]
extension=php_sqlsrv_53_nts_vc9.dll
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_53_nts_vc9.dll

6.- Probar que la librería haya cargado dentro del PHP.

Volver al navegador y ejecutamos el archivo test.php de nuevo (http://ip-de-servidor/test.php)….. si todo ha salido bien, debería de mostrarnos la siguiente pantalla:

php-mssql-2003-16

 

Bien, eso es todo por ahora, cualquier consulta me lo hacen saber….

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *