IIS 7, PHP y SQL Server 2005 en Windows 2008
Lamentablemente me ha tocado un proyecto en el que tuve que luchar con lo siguiente:
- PHP
- SQL Server 2005
- Windows Authentication solamente (no Mixed Mode)
- Fast-CGI
- Internet Information Services 7
- Windows Web Server 2008
Dado que no hay mucha información para hacer funcionar todos estos componentes, he decido publicar un post.
Los inconvenientes que pueden presentarse, son los siguientes:
- Página en blanco al ejecutar cualquier script PHP
- Error de conexión a SQL Server 2005
- Error de autenticación de SQL Server 2005
De entrada se asume que PHP ya está instalado en la ruta C:\PHP, aunque puede ser otra. Para ver una instalación de PHP en IIS 7, referirse a este post.
Resolver página en blanco
Para empezar, vale destacar que al día de hoy, la versión PHP 5.2.8 non-thread-safe, disponible para descarga desde el sitio de PHP, no se deja correr con IIS 7 y los drivers de mssql que trae por defecto PHP. Al ejecutar algún script con llamadas a la base de datos, aparece una pantalla en blanco. Además, viendo el Event Log de Windows aparece un lindo segmentation fault al ejecutar php-cgi.exe
Solución: Al día de hoy, decidí utilizar PHP 5.2.6, una versión anterior, pero que funciona bien en Windows.
Resolver Acceso a la Base de Datos
Para seguir con la instalación de estos componentes, el siguiente problema a resolver es el error de acceso a la base de datos.
Solución: Al día de hoy Microsoft ha sacado drivers de SQL Server 2005 para PHP, que hasta ahora estaban en una versión Beta, pero que actualmente hay una primera versión 1.0.
Al bajar los drivers, hay que copiarlos en la carpeta C:\PHP\ext
Luego, hay que habilitarlo en el php.ini, agregando la linea:
extension=php_sqlsrv.dll
Y por último, utilizar las primitivas de conexión y consultas ofrecidas en la librería.
Este driver de SQL Server 2005 en PHP es más robusto que la versión del driver mssql por defecto en PHP.
Utilizar Windows Authentication Mode en lugar de Mixed Mode
Por último, lo que necesité fue utilizar Windows Authentication en lugar de Mixed Mode (o SQL Server Authentication), de esta manera, tendría que poder conectarme con el usuario de Windows a la base de datos. Incluido si la base de datos está en un servidor diferente.
Solución: La primitiva sqlsrv_connect del driver PHP de SQL Server 2005, tiene varias opciones que son pasadas en un array. Hay que tener cuidado de no pasar username y password, de forma que el driver utilice Windows Authentication, tal como está detallado aquí.
Además de esto, es necesario realizar algunas configuraciones extras.
En php.ini:
En primer lugar, configurar fast.impersonate=1, de esta manera, el usuario con el que esté ejecutando el thread de IIS, será pasado hacia abajo, y utilizado para conectarse a SQL Server.
En segundo lugar, hay que ir a IIS y aquí tenemos varias opciones. La primera, y más fácil a mi criterio, es crear un Pool de Aplicacones nuevo. Para esto, ir a Manager de IIS, debajo de Application Pools y crear un pool nuevo, por ejemplo, asignándole el nombre Custom Application Pool.
Luego, vamos a la aplicación en cuestión, o directorio virtual, y seleccionamos el Application Pool recientemente configurado.
Al hacer esto, y ejecutar el script de PHP que accede a la base, podría seguir dando un error, en este caso que ANONYMOUS_LOGON no tiene acceso. Para solucionar esto, vamos nuevamente al administrador de IIS y buscamos el directorio virtual o aplicación, y luego seleccionamos las opciones de Authentication. Estando allí, seleccionar las opciones de Anonymous authentication, y editar. Cambiar las credenciales para que use una válida y con acceso a la base de datos en SQL Server 2005.
En caso de querer ver cuáles fueron los errores, se puede utilizar la primitiva sqlsrv_errors() del driver SQL Server 2005.
Artículos relacionados:
- La solución a los problemas de tildes y caracteres especiales con PHP y SQL Server
Si estás teniendo problemas con el charset, encoding type, etc.... - Cambiar el Idioma de Windows (Vista/Windows 7)
Cómo cambiar el idioma de Windows es algo que muchos... - ¿Cómo agregar resolución en máquina virtual Windows?
Si su máquina virtual Windows (guest) no configura correctamente la... - Internal Server Error con una simple solución
A quien no le ha pasado alguna vez de recibir...
Gracias!! Me anduvo.
tengo una pregunta tienes algun tutorial de como instalar SQL 2005 en windows server 2008??? o alguna pagina realmente me estoy volviendo loco con eso.
Por otra parte q hay q habilitar en el IIS para q sirva bien sql????
de antemano muchas gracias
Saludos, me encuentro con un problemita, tengo sql server 2008 con sql server 2005 y php
La cuestion es que hay un sitio instalado y conecta, hace consulta a la base de datos, me trae los datos a los formularios.. hasta ahi todo va bien
El problema es que no inserta desde el sitio a la base de datos y si inserto en las tablas desde sql server 2005 management studio, si lo hace
Ojala me puedan ayudar con este asunto!!
corrección…
Saludos, me encuentro con un problemita, tengo Windows server 2008 con sql server 2005 y php
La cuestion es que hay un sitio instalado y conecta, hace consulta a la base de datos, me trae los datos a los formularios.. hasta ahi todo va bien
El problema es que no inserta desde el sitio a la base de datos y si inserto en las tablas desde sql server 2005 management studio, si lo hace
Ojala me puedan ayudar con este asunto!!
hola!!!!!!!!!!!!
tengo un problema, estoy trabajando con php conectado a Sql Server 2005 mi formulario si inserta y elimina pero no me quiere modificar… ya lo he checado muchas veces y no he podido resolver mi problema y me urge por que tengo que terminar este proyecto ojala me puedan ayudar porfavor!!!!!!!!!!!!!!!!!!