Tagged:iis 6

Problemas para subir ficheros en PHP bajo configuraciones Windows + IIS6

El problema: Script PHP perteneciente a cualquier aplicación que debería subir imágenes al servidor vía HTTP y no lo hace. El script se ejecuta en entorno Windows + IIS6. La versión de PHP puede ser cualquiera <= 5.3.1 (podría ser también mayor, pero hablo sólo de lo que yo he probado). Varias veces me he encontrado con el mismo problema, y varias veces me ha hecho perderder el tiempo. La primera vez hasta una semana dando tumbos por la red intentando averiguar el motivo de dicho comportamiento, revisando los permisos de las carpetas de la aplicación involucradas en el proceso, revisando los scripts, revisando la configuración del php.ini, y hasta dando permisos excesivos a usuarios potencialmente peligrosos para la web. El resto de veces sólo he perdido unos minutos hasta que recordaba: ¡Ah sí, los permisos de la carpeta temporal de Windows!.

Efectivamente, el problema es que PHP sube los ficheros a una carpeta temporal antes de pasarla a su ubicación final. Esa carpeta temporal puede variar en cada instalación, pero por defecto sería «c:\windows\temp\». Es preciso verificar el valor de la variable de configuración «upload_tmp_dir» en el php.ini para asegurarse de cuál es la carpeta correcta en nuestra instalación.

Y la solución es tan simple como otorgar permiso de escritura a esta carpeta al usuario IUSR_{NOMBRE_DE_LA_MAQUINA}. Mi recomendación es configurar el php.ini para que esta carpeta no sea «c:\windows\temp\», sino una carpeta diferente como por ejemplo «c:\php\temp\upload\» por motivos de seguridad evidentes.

Cambiado esto, y supuesto que todas las demás cosas evidentes relacionadas con la subida de ficheros estén configuradas, todo irá sobre ruedas.

Configurar PHP 5.2.10 en IIS 6 con FastCGI

1. Se presupone que IIS 6 está instalado y funcionando.
2. Descargar el instalador de fastcgi de http://www.iis.net/extensions/FastCGI o del sitio que más guste (hay muchas fuentes con diferentes implementaciones). Hay que tener cuidado con descargar la versión correcta: para 32 bits o para 64. Instalarlo.
3. Descargar el instalador de PHP de http://www.php.net. Ejecutarlo. Cuando pregunte cómo se desea instalar, elegir el funcionamiento a través de FastCGI. Seleccionar las extensiones que se desee instalar y terminar el proceso de instalación.
4. Una vez instalado, pinchar en Administrador IIS -> Web Sites -> [botón derecho] -> Properties -> Home Directory -> Configuration -> Add
5. En la pantalla que aparece, poner la ruta hacia la dll de fastcgi, que por defecto se habrá instalado en c:/windows/system32/inetsrv/fcgiext.dll. En extensión añade «php» y asegúrate de que está tildada la opción «Script engine». Guardar.
6. Configura manualmente el fichero c:/windows/system32/inetsrv/fcgiext.ini (si fastcgi se instaló en otra carpeta, el .ini también se encontrará ahí). Deben añadirse las secciones [TYPES] y [PHP5] así:
[Types]
php=PHP5
[PHP5]
ExePath=[rutahacia]php-cgi.exe
7. Listo tus scripts PHP son accesibles desde cualquier dominio configurado en el IIS o que configures posteriormente. Si sólo deseas hacerlo sobre un website en particular, realiza el paso 4 sólo sobre el website en el que desees activar la ejecución de scripts PHP.

{ Piensa / Think }

"This is a waste of life. [...] the entire educational system in the modern day is nothing more than a cookie cutter processing plant that prepares humans for mostly predefined occupational roles. This element of human life has become so traditionally ingrained, that many falsely consider the nature of ‘having a job’ some form of human instinct. Even parents will ask their kids “What do you want to be when you grow up?” as though there was only one thing. This is disturbing and a violation of human potential." - The Zeitgeist Movement


"He aprendido que hay cosas que pueden ser comprendidas pero que nunca podrán ser explicadas con palabras sin desvirtuar su grandeza" - Andrés Pascual


"You never change things by fighting the existing reality. To change something, build a new model that makes the existing model obsolete." - Buckminster Fuller


"... I am the master of my fate. I am the captain of my soul." - William Ernest Henley