A continuación, encontrarás un tutorial paso a paso para solucionar el error “Falta un directorio temporal” en WordPress y el inconveniente de no poder subir imágenes o archivos. Este caso puntual se presentó en un servidor con VestaCP, pero los pasos son similares en cualquier hosting con configuraciones de open_basedir y permisos de carpetas.
1. Descripción del problema
Al intentar subir una imagen en WordPress (en Medios → Añadir nuevo), aparece el error:
“Falta un directorio temporal”
(o en algunas versiones, “El archivo subido no se ha podido mover a…”)
Además, en los registros de error (logs) del servidor, se observan mensajes como:
sqlCopyPHP Warning: Unknown: open_basedir restriction in effect. File(/tmp) is not within the allowed path(s)...
File upload error - unable to create a temporary file in Unknown on line 0
También puede que al final, cuando se corrige open_basedir, se muestre un nuevo error:
“El archivo subido no se ha podido mover a wp-content/uploads/…”
Lo que indica un problema de permisos en la carpeta de subidas.
2. Causas principales
- Restricción de
open_basedir: PHP está intentando usar/tmp(o alguna carpeta temporal), pero no está incluida en la lista de directorios permitidos poropen_basedir. - Permisos en la carpeta
uploads: El usuario con el que corre PHP/Apache (por ejemplo,www-data) no tiene permisos de escritura enwp-content/uploads.
3. Solución en dos partes
3.1. Añadir :/tmp a la directiva open_basedir
En muchos servidores con VestaCP, la directiva open_basedir no se define directamente en /etc/php/7.x/apache2/php.ini, sino en archivos de configuración específicos del dominio. Para hallarlos:
- Buscar dónde se define la directiva
open_basedir- Conéctate por SSH y revisa la carpeta de configuración del dominio:bashCopy
cd /home/USUARIO/conf/web grep -Ri open_basedir . - En nuestro ejemplo, el usuario es
clientey el dominio escliente.com.mx. Aparecieron archivos como:arduinoCopy/home/cliente/conf/web/cliente.com.mx.apache2.conf /home/cliente/conf/web/cliente.com.mx.apache2.ssl.conf - Dentro de esos archivos se encontró una línea como:iniCopy
php_admin_value open_basedir /home/cliente/web/cliente.com.mx/public_html:/home/cliente/tmp
- Conéctate por SSH y revisa la carpeta de configuración del dominio:bashCopy
- Editar para incluir
:/tmp- Abre cada archivo con un editor (por ejemplo,
nano) y modifica la línea:iniCopyphp_admin_value open_basedir /home/cliente/web/cliente.com.mx/public_html:/home/cliente/tmppara que quede así:iniCopyphp_admin_value open_basedir /home/cliente/web/cliente.com.mx/public_html:/home/cliente/tmp:/tmp - Guarda los cambios.
- Abre cada archivo con un editor (por ejemplo,
- Reinicia el servicio
- Si usas Apache con mod_php:bashCopy
systemctl restart apache2 - Si usas PHP-FPM:bashCopy
systemctl restart php7.2-fpm - Ajusta la versión
7.2según corresponda.
- Si usas Apache con mod_php:bashCopy
- Verifica con
phpinfo()- Crea o revisa
info.php(dentro de tu sitio) con:phpCopy<?php phpinfo(); - Accede a
https://tudominio.com/info.phpy localiza “open_basedir” en la sección “PHP Core”. - Asegúrate de que Local Value incluya
:/tmp.
- Crea o revisa
Con esto, desaparecerá el error de “open_basedir restriction in effect” y la advertencia de “Falta un directorio temporal”. PHP podrá usar /tmp sin restricciones.
3.2. Ajustar permisos en la carpeta uploads
Después de arreglar la parte de open_basedir, es posible que sigas viendo un error como:
“El archivo subido no se ha podido mover a wp-content/uploads/2025/01.”
Esto indica que el usuario con el que corre PHP/Apache (por ejemplo, www-data) no tiene permisos de escritura en wp-content/uploads (y subdirectorios).
- Identifica el usuario de Apache/PHP
- En Ubuntu/Debian, normalmente es
www-data. En CentOS suele serapache. - Si usas VestaCP con PHP-FPM, a veces corre con el mismo usuario de la cuenta (por ejemplo,
cliente). Pero en este caso, se encontró que Apache/PHP se ejecuta comowww-data.
- En Ubuntu/Debian, normalmente es
- Asigna la propiedad y permisos correctos
- Desde la raíz de tu WordPress:bashCopy
cd /home/cliente/web/cliente.com.mx/public_html/wp-content - Cambia la propiedad de la carpeta
uploads:bashCopychown -R www-data:www-data uploads(Sustituyewww-data:www-datapor el usuario/grupo reales que corran PHP, si son distintos.) - Ajusta los permisos recomendados:bashCopy
find uploads -type d -exec chmod 755 {} \; find uploads -type f -exec chmod 644 {} \;
- Desde la raíz de tu WordPress:bashCopy
- Prueba subir un archivo
- Ve a WordPress → Medios → Añadir nuevo y sube la imagen o PDF.
- Si los permisos son correctos, WordPress podrá mover el archivo desde la carpeta temporal hasta
wp-content/uploads/AAAA/MM.
4. Notas finales
- En algunos servidores con VestaCP, si cada dominio utiliza PHP-FPM con su propio usuario (por ejemplo,
cliente), puede que no sea necesario asignar permisos awww-data. - Asegúrate de que la configuración de PHP-FPM para tu dominio esté asociada al mismo usuario que posee los archivos, para que no haya conflicto de permisos.
- Si prefieres no usar
/tmpcomo carpeta temporal, podrías definirupload_tmp_diroWP_TEMP_DIRenwp-config.phpy permitir esa ruta enopen_basedir. Pero en la mayoría de los casos, habilitar/tmpy dar los permisos adecuados auploadsfunciona sin problemas.
5. Conclusión
Para resolver el error “Falta un directorio temporal” o “El archivo subido no se ha podido mover…” en WordPress:
- Incluye
/tmpenopen_basedirsi PHP lo necesita (edita los archivos de configuración del dominio y reinicia PHP/Apache). - Asegúrate de que la carpeta
uploads(y subcarpetas) tenga permisos de escritura para el usuario con el que corre PHP (propietario y permisos adecuados).
De este modo, podrás subir imágenes, PDFs y otros archivos a WordPress sin volver a ver esos errores de directorio temporal o permisos. ¡Listo!
English


