WordPress : The uploaded file could not be moved to

Hace algunos días, me dejé este tema en el tintero. Es un error que nos puede aparecer utilizando WordPress bajo un entorno PHP con Safe Mode habilitado. Encontré la solución en el blog de Sébastien Wains. El primer “acto reflejo” es deshabilitar Safe Mode, al igual que Sébastien, yo prefiero dejarlo habilitado. Pero como no tuve tiempo de ponerme, lo deshabilité temporalmente para subir imágenes de manera urgente. Ahora ya puedo explicar la forma de trabajar con Safe Mode habilitado.

¿Qué es Safe Mode y por qué afecta a la subida de archivos?

The PHP safe mode is an attempt to solve the shared-server security problem. It is architecturally incorrect to try to solve this problem at the PHP level, but since the alternatives at the web server and OS levels aren’t very realistic, many people, especially ISP’s, use safe mode for now.

Con Safe Mode on, PHP se negará a leer archivos que tengan otro propietario distinto (UID) que el usuario que ejecuta en ese momento el script. Por ejemplo, si el usuario apache (UID 48) intenta leer algo del directorio wp-content/uploads (con propietario ruben, UID 10002) nos dará error, porque ambos UID no coinciden.

El truco es configurar php para hacer que Safe Mode se base en el GID y no en el UID. Luego asignaremos permisos 7777 la carpeta uploads, y a las diferentes carpetas con el número del año, si es que lo tenemos así organizado. Asignando 7777 a wp-content/uploads estamos asignando la sticky flag o sticky bit (group ID, setgid o SGID). Cuando este sticky bit es asignado a un directorio , los directorios y archivos nuevos creados bajo la jerarquía de la carpeta en la que asignamos el bit heredarán el grupo asignado a ese directorio. En el modo normal, se usa el grupo primario del usuario al asignar un grupo a la carpeta. Reiniciaremos apache.

# Habilitar safe_mode_gid=On en php.ini
# chmod 7777 /wp-content/uploads
# /etc/init.d/httpd restart

Links:

6 thoughts on “WordPress : The uploaded file could not be moved to

  1. hola ruben me pasa eso de que no me deja subir los archivos, mi pregunta es donde desactivo la opcion de safemode on?

    gracias!!!

  2. Bueno, eso depende, en el caso de Plesk, el Safe Mode está en Settings>Setup y ahí, cuando habilitas para el dominio el soporte para PHP aparece un checkbox con el Safe Mode. Pero ya digo, en el caso de Parallels Plesk Panel.

    Saludos

  3. Muchas gracias por la ayuda.

    Hace unas semanas, cambiamos el alojamiento de nuestro dominio y en el nuevo servidor nos salía este error. Después de dar vueltas por internet probando otras soluciones (tocar el php.ini nos asustaba, por puro desconocimiento) lo medio apañamos desmarcando la opción de clasificar los ficheros subidos en directorios uploads/año/mes, ya que en el nuevo servidor se cren los directorios mes con el usuario apache.

    Por suerte tenemos Plesk y siguiendo tu anterior comentario (que nos suena menos a chino que editar el php.ini) hemos resuelto el problema. Los directorios se siguen creando con el usuario apache, pero podemos subir ficheros con wordpress.

    Muchas gracias.

  4. Buenos días gente, les cuento q me he encontrado con este mismo problema… lo primero q hice fué cambiar los permisos de los archivos sin ningún resultado. Luego de leer en foros dí con un post q me llevó a pensar q me había quedado sin espacio disponible en el server…. y así fué. Luego de borrar algunos archivos q ya no se usaban pude seguir subiendo files.
    No conozco la política de mensajes de error de wordpress pero parece q para algunos errores maneja un mensaje genérico.

    Espero haber ayudado con esto. Saludos

  5. Buenas,
    soy usuario de plusdominios, dónde tengo el alojamiento. He tratado por todos los medios de subir imagenes desde formulario en php, pero con el safe mode On no me deja. He hablado con los administradores y no me hacen caso, no me lo desabilitan, ni dan permisos de grupo a la carpeta. Creo que ni saben lo que les hablo. La pregunta es, siendo un ususario normal y corriente sin ser administrador, ¿hay alguna manera de conseguir subir ficheros mediante formulario y php?

    Gracias a todos

Leave a Reply

Your email address will not be published. Required fields are marked *