PHP en Windows Vista con FastCGI

Con el lanzamiento de Windows 2008 Beta3 (del que Gattaca es Early Adopter gracias a Invitación de Microsoft Colombia) hemos comenzado la fase final de la migración de nuestras aplicaciones para esta plataforma. Sin embargo hay algunas cosas nuevas en este servidor que merecen verse con atención, una de ellas es el soporte nativo de PHP y otros lenguajes de Script como IronRuby a través de una iniciativa conjunta de Microsoft y Zend para desarrollar algo llamado FastCGI que es una nueva forma mejorada para multiprocesamiento de CGI.


En este post comentaremos sobre la experiencia de instalar y correr aplicaciones de PHP sobre IIS7 usando FastCGI.


El Ambiente.


Esto puede hacerse en Windows 2008 Beta3 que tiene el soporte FastCGI nativo ó

En una maquina corriendo Windows Vista con IIS7, en este caso debe instalarse el soporte FastCGI CTP 2 disponible en este link


También hay que contar con PHP, este puede descargarse de http://www.php.net/ , aunque hay gente corriendo esto con php4, yo lo hice con la versión 5.2, en esta página pueden descargarse diversas versiones pero la recomendación es bajar la que se llama PHP 5.2.3 Non-thread-safe Win32 binaries [9,523Kb] – 01 June 2007, esta versión está optimizada para correr con IIS7 y FastCGI. (Las otras también corren y muy bien, pero esta tiene un rendimiento 30% superior según las pruebas realizadas por Microsoft y Zend)


La Instalación


El PHP


Descomprimir el PHP en una ruta sin espacios en el nombre, por ejemplo c:php o d:php, renombrar el archivo php.ini-recomended por php.ini, abrir el archivo php.ini y cambiar las siguientes variables:


Redirect cgi a falso (cgi.force_redirect = 0), modificar la ruta de las extensiones (extension_dir = “D:PHP ext”) (o la ruta en donde haya puesto el PHP),

También debe crear las variables de Entorno (En Panel de Control, Sistema, Configuración Avanzada del Sistema, Opciones Avanzadas, Variables de Entorno) Agregar la variables de Usuario “PHPRC = d:phpphp”, agregar en la variable del Sistema Path la ruta: “d:phpphp”

Con eso el PHP debería estar listo para correr en el modo anterior de PHP y también en el modo nuevo. Algunas Variables opcionales que hemos configurado que podían ser de utilidad (short_open_tag = On, error_reporting = E_ALL & ~E_NOTICE, upload_max_filesize = 10M, session.save_path = “D:PHPTempSessions”)

Finalmente hay que darle permisos en la carpeta PHP al usuario del IIS Process.


El FastCGI


Descomprimir el archivo que descargo en alguna ruta del Disco, por ejemplo D:FastCGI

En el archivo de readme.txt vienen las instrucciones muy sencillas que son básicamente:

Instalar FastCGI corriendo desde la consola de comandos con permisos de administrador:

fcgisetup.exe /install

Relacionar el Php con el FastCGI:

fcgisetup.exe /add d:phpphp-cgi.exe PHP, (La ruta donde dejo el PHP)

Listo, esto debería crear los módulos y handlers necesarios en el IIS 7.0, para verificar que quedo correctamente instalado debería encontrar algo como esto en su consola de administración del IIS7.

En la lista de Módulos (por vista de Características) un modulo nativo llamado iisfcgi apuntando a C:Windowssystem32inetsrviisfcgi.dll,

En la lista de asignaciones de controladores (Handlers) una asignación de Script llamada PHP-iisfcgi apuntando a su PHP (por ejemplo: D:PHPphp-cgi.exe) con una ruta de acceso de solicitudes apuntando a los archivos PHP (*.PHP).

Si tienen otros manejadores apuntando a *.PHP seguramente ya tenia php corriendo o trato de hacer algo similar a esta instalación. En nuestra instalación eliminamos los modulos y controladores asociados a PHP que no eran FastCGI. (Pero antes de hacer esto usted debe entender correctamente que es lo que hacen los módulos y controladores que está eliminando y por que los elimina).


Si llego hasta aquí, toda parece está bien instalado y configurado, puede crear una aplicación apuntando a un directorio y crear una página PHP sencilla como esta para probar (modinfo.php que contiene unicamente “<?php phpinfo(); ?>”, esta página vista desde el browser debería mostrarle el status del PHP y en la línea Server Api indicar :


Server API : CGI/FastCGI


La Aplicación.


Ahora que ya está corriendo aplicaciones PHP en IIS7 y con el nuevo soporte mejorado de alto rendimiento de PHP FastCGI puede ejecutar sus aplicaciones PHP, nosotros corremos Sugar CRM versión 4.5.1 sobre SQL Server. (Como distribuidores y consultores de Sugar CRM es muy útil poder ofrecer a nuestros clientes el producto sobre IIS7 y estar listos para cuando vayan a los nuevos servidores Windows 2008, pero otra razón importante de escoger esta aplicación es que Sugar ha venido trabajando desde hace más de un año con Microsoft para ofrecer lo mejor del mundo open source sobre la plataforma Microsoft, esto es soporte mejorado para IIS, optimización para integración con el Directorio Activo, y soporte para SQL Server (incluyendo Express, Standard y Enterprise) y Soporte para el Modelo de Licenciamiento Microsoft Community License. (Parte de la iniciativa Microsoft Shared Source Initiative) entre otros aspectos.


En otro post hablaremos de por que esto funciona mejor que antes (las razones) y como correr Ruby o algun otro lenguaje de Scripting usando FastCGI.

Nota: Tengo que agradecer a Ivan Suárez y German Cárdenas del Grupo Commercial Open Source de Gattaca quienes son expertos en PHP, y me han ayudado mucho en la instalación, configuración y comprensión de los conceptos propios de PHP. Gracias Muchachos.

Espero que sea de Ayuda.


Juan Carlos Peláez

MCTS


KeyWords: PHP, Windows Vista, IIS7, Windows Server 2008 Beta 3, FastCGI, Sugar CRM, Juan Peláez