Estás intentando subir una imagen, un PDF, un plugin, cualquier cosa, y WordPress o CodeIgniter te suelta «Your upload path is not valid or does not exist». No hay subida. No hay progreso. Solo un callejón sin salida. Me he topado con este muro más veces de las que me gustaría admitir, y la solución casi nunca es lo que el mensaje de error te hace pensar.
El error de ruta de subida en WordPress y CodeIgniter es un problema del lado del servidor: o la carpeta no existe, o la ruta es incorrecta, o los permisos bloquean la escritura, o una migración rompió la configuración de la base de datos. Soluciónalo comprobando la ruta real, no reinstalando nada.
Qué significa realmente el error de ruta de subida (y qué no)
Ese mensaje es genérico. No te dice si falta la carpeta, si la ruta está mal formada o si PHP simplemente no puede escribir en ella. Los tres casos producen la misma frase.
La mayoría de la gente empieza reinstalando WordPress o volviendo a subir los archivos de CodeIgniter. Mala jugada. El error de ruta de subida casi siempre es un problema de configuración o de permisos, no de código corrupto.
Esta es la tabla de diagnóstico que uso antes de tocar una sola línea de código:
- Error tras una migración del sitio → WordPress guarda un valor obsoleto de upload_path en la base de datos. Revisa wp_options.
- Error solo en CodeIgniter con rutas como «./assets/images/» → la ruta relativa se resuelve de forma distinta en producción. Usa las constantes del framework.
- Errores intermitentes → los permisos de la carpeta son demasiado restrictivos (terreno de 755/775).
- El mensaje menciona open_basedir → tu hosting restringe el acceso de PHP a ese directorio.
- Funciona en localhost, falla en el servidor → desajuste de ruta absoluta entre entornos.
WordPress: corrige upload_path en la base de datos primero
Después de cualquier migración, este es el culpable nueve de cada diez veces. WordPress mantiene una fila en wp_options llamada upload_path, y si apunta a una carpeta que ya no existe, las subidas mueren al instante.
Entra en phpMyAdmin (o Adminer, o lo que te dé tu proveedor), abre la tabla wp_options — el prefijo puede no ser wp_, compruébalo en tu wp-config.php — y busca la fila donde option_name = ‘upload_path’.
Pon su valor a NULL. Eso es todo. WordPress vuelve a su ruta por defecto wp-content/uploads y todo funciona de nuevo. Si necesitas una carpeta personalizada, pon ahí la ruta absoluta, pero sinceramente, NULL es la opción más segura.
Limpia la caché después — caché de objetos, caché de página, todo. A veces WordPress sigue sirviendo el valor antiguo.
Fija la ruta en wp-config.php si el arreglo de la base de datos falla
Si la vía de la base de datos no se queda, defínela manualmente. Abre wp-config.php y añade esta línea antes del comentario que dice «That’s all, stop editing!»:
define(‘UPLOADS’, ‘wp-content/uploads’);
Mucha gente hace grep en su wp-config.php, no encuentra ninguna constante UPLOADS y entra en pánico. Es normal. WordPress usa los valores por defecto hasta que los sobrescribes. Definirla aquí tiene prioridad sobre la base de datos.
Comprueba que la carpeta existe y tiene permisos de escritura
Conéctate por FTP o SSH y confirma que wp-content/uploads está físicamente ahí. Si se borró durante una migración — lo he visto pasar — créala manualmente.
Los permisos deberían ser 755 para carpetas y 644 para archivos. En algunos hostings compartidos donde PHP se ejecuta con un usuario distinto al del servidor web, necesitarás 775. No pases a 777. Así es como te hackean.
CodeIgniter: deja de usar rutas relativas
El clásico error de ruta de subida en CodeIgniter viene de esta línea:
$config[‘upload_path’] = ‘./assets/images/’;
Eso funciona en tu portátil. Se rompe en el servidor porque la ruta relativa se resuelve contra un directorio de trabajo distinto. CodeIgniter tiene constantes precisamente por esta razón.
Si la carpeta está dentro del directorio de tu aplicación, usa APPPATH:
$config[‘upload_path’] = APPPATH . ‘assets/images/’;
Si está en la raíz del proyecto, usa FCPATH:
$config[‘upload_path’] = FCPATH . ‘assets/images/’;
Este único cambio resuelve el error de ruta de subida en CodeIgniter más a menudo que cualquier otra cosa. El framework resuelve esas constantes en tiempo de ejecución, así que la ruta siempre es correcta independientemente de dónde se despliegue la app.
Crea el directorio automáticamente para que nunca vuelva a fallar
Por si acaso. Añade una comprobación antes de establecer la configuración:
$upload_path = APPPATH . ‘assets/images/’;
if (!is_dir($upload_path)) {
mkdir($upload_path, 0777, TRUE);
}
$config[‘upload_path’] = $upload_path;
El flag TRUE hace que mkdir cree los directorios padre de forma recursiva. Solo esto me ha salvado de errores de ruta de subida en despliegues nuevos donde la estructura de carpetas no estaba en Git.
Permisos y propiedad en Linux
Entra por SSH al servidor, ve al directorio de tu app, ejecuta ls -la y mira la carpeta assets. Si es propiedad de root y PHP se ejecuta como www-data, estás bloqueado.
Corrige los permisos con chmod -R 755 assets/ y la propiedad con chown -R www-data:www-data assets/. Ajusta www-data al usuario con el que se ejecute tu servidor web — es apache en CentOS, nginx en Debian, a veces tu usuario de cPanel.
Trampas a nivel de servidor que rompen las subidas
Algunos hostings compartidos activan open_basedir, que restringe a PHP el acceso a directorios fuera de una lista permitida. Si tu error de ruta de subida menciona esta directiva, no puedes arreglarlo desde tu código. Revisa php.ini o el panel de tu hosting, y si no puedes editarlo, abre un ticket. Ningún cambio de código lo va a saltar.
Windows y Linux manejan las rutas de forma distinta. Windows usa barras invertidas, Linux usa barras normales. Windows no distingue mayúsculas, Linux sí — Images e images son dos carpetas diferentes. Usa DIRECTORY_SEPARATOR cuando necesites compatibilidad multiplataforma:
$config[‘upload_path’] = FCPATH . ‘assets’ . DIRECTORY_SEPARATOR . ‘images’;
Previene el error de ruta de subida antes de que ocurra
Configura ajustes por entorno para que desarrollo y producción nunca choquen. En CodeIgniter, cambia según la constante ENVIRONMENT y apunta cada uno a su propia ruta absoluta. En WordPress, mantén upload_path como NULL a menos que tengas una razón real para cambiarlo.
Estructura tus carpetas una vez y sé constante. Una convención limpia — assets/images, assets/uploads/profile, assets/uploads/documents, assets/uploads/temporary — significa que siempre sabes dónde acaban los archivos.
Añade también logging. En CodeIgniter, cuando do_upload() falla, captura display_errors() y escríbelo en tu log. En WordPress, activa WP_DEBUG_LOG. Los fallos silenciosos son los peores porque no tienes ni idea de qué ruta intentó PHP realmente.
Por qué esto importa más allá del error en sí
Un sistema de subidas roto mata más que la funcionalidad. Mata tu SEO. Google premia el contenido fresco, y si no puedes publicar imágenes, galerías o recursos descargables, tu velocidad de contenido cae. Los usuarios rebotan cuando las funciones no van, y los Core Web Vitals sufren cuando el procesamiento de subidas se cuelga.
Arreglar el error de ruta de subida en WordPress o CodeIgniter no es solo una tarea de desarrollador. Es mantener tu sitio vivo e indexable.
Si te has topado con este error en Laravel, Symfony o algún CMS antiguo hecho a medida, la lógica es la misma: verifica la ruta absoluta, verifica que la carpeta existe, verifica que PHP puede escribir en ella. El noventa por ciento de las veces, ese es todo el arreglo.