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.