justin johnson
Esto tiene que ver con la carga de medios en WordPress.
Cada vez que WP crea una carpeta para nuevas cargas (organiza las cargas por año y mes: aaaa/mm), la crea con el usuario y grupo “apache:apache”, con acceso total a todos (777 o drwxrwxrwx
).
Sin embargo, después de eso, WP no puede crear una carpeta dentro de esa carpeta (p. ej.: mkdir 2011
tiene éxito, pero mkdir 2011/01
falla). Además, las cargas no se pueden mover a estas carpetas recién creadas aunque los permisos sean 777 (rwxrwxrwx
).
Una vez al mes, tengo que chown
las carpetas recién creadas serán las mismas que usuario:grupo que el resto de los archivos. Una vez que hago eso, la carga funciona bien (lo que no tiene sentido para mí). La parte realmente frustrante es que este problema no existe en otras instalaciones de WP en otros dominios en el mismo servidor.
* No estaba seguro de si esto debería estar aquí o en serverfault.
Editar: el directorio contenedor /.../httpdocs/blog/wp-content/uploads
tiene la propiedad correcta
drwxrwxrwx 5 myuser psaserv 4096 Jun 3 18:38 uploads
Este es un entorno Plesk/CentOS alojado por Media Temple (dv).
He escrito el siguiente script de prueba para simular el problema
<pre><?php
$d = "d" . mt_rand(100, 500);
var_dump(
get_current_user(),
$d,
mkdir($d),
chmod($d, 0777),
mkdir("$d/$d"),
chmod("$d/$d", 0777),
fileowner($d),
getmyuid()
);
El script siempre crea el primer directorio. mkdir($d)
exitosamente. En el dominio A, donde está el problema de WP, no puede crear el directorio anidado mkdir("$d/$d")
. Sin embargo, en el dominio B, ambos directorios se crean correctamente.
Estoy ejecutando cada script en /var/www/vhosts/domainA/httpdocs/tmp/t.php
y /var/www/vhosts/domainB/httpdocs/tmp/t.php
respectivamente revisé los permisos en tmp
, httpdocs
y domain[AB]
y son los mismos para cada camino. Lo único que difiere es el usuario.
Una solución es usar FastCgi. Esto hace que PHP se ejecute como el usuario propietario del sitio. Los nuevos archivos y carpetas serán del mismo usuario y grupo. Esto resolverá tu problema.
Hay una penalización de rendimiento para FastCgi, pero obtienes algo de seguridad adicional ya que restringe php. Si está alojando varios sitios web con varios usuarios, esta podría ser una buena idea.
Intente ir a su página de configuración miscelánea (o medios dependiendo de su versión) y asegúrese de que el directorio de carga siga siendo wp-content/uploads.
Si lo necesitas. establecer la url completa también.
Además, como solución final, deshabilite la opción de organizarlos en carpetas para que WordPress ni siquiera necesite crear carpetas.
-
Su solución final funciona, sin embargo, no aborda el problema subyacente 🙁 Si no obtengo una respuesta en ese sentido, definitivamente le otorgaré la recompensa. Como pregunta adicional, ¿qué host tenía? problema?
–Justin Johnson
15 de junio de 2010 a las 6:19
-
Una pequeña tienda al azar para un cliente. Tuve que lidiar con un problema tras otro con el host hasta que finalmente convencí al cliente para que se mudara a mi host después de 2 años. Curiosamente, no ha habido tantos problemas desde entonces. Probablemente sea una cosa del modo seguro de PHP. Busqué en Google y vi un par de recomendaciones para que los propietarios
nobody
. Este hilo tiene un montón de mensajes al respecto: wordpress.org/support/topic/254069– Aarón Butacov
15 de junio de 2010 a las 6:23
-
Oh, asumo que lo intentaste, pero ¿has establecido recursivamente explícitamente los scripts y las carpetas para el mismo propietario?
– Aarón Butacov
15 de junio de 2010 a las 6:26
-
Sí tengo. PHP se ejecuta como apache:apache y crea las carpetas con la misma propiedad. El problema es que aunque los permisos son
rwxrwxrwx
, PHP no puede mover los archivos cargados dentro de la carpeta que acaba de crear. Hay algo que no funciona con los permisos en alguna carpeta principal para este dominio específico, pero no puedo encontrar qué es.–Justin Johnson
15 de junio de 2010 a las 19:26
Busque un bit setuid o setgid en un directorio por encima del directorio 2010. ls -l tendrá una s o S en los permisos para el directorio. Asegúrese de que este directorio tenga la propiedad correcta.
-
Probé mi script de muestra con y sin
s
establecido en el contenedortmp
directorio, pero no pude crear la carpeta anidada (ver mi edición).–Justin Johnson
4 de junio de 2010 a las 22:21
-
¿Los directorios se crean como el mismo usuario en ambos dominios? Compare el árbol de directorios hasta /. Podría haber un problema de permisos más arriba en el árbol.
– BillThor
5 de junio de 2010 a las 1:00
-
Comparé el árbol de directorios hasta
/var/www/vhosts
donde se encuentran ambos dominios. Por lo que pude ver, eran permisos idénticos. Lo único que difería entre los dos caminos era el usuario. El grupo es el mismo para ambas rutas (psaserv), pero cada dominio tiene un usuario diferente (una restricción de Plesk).–Justin Johnson
5 de junio de 2010 a las 1:39
desfile de calle
Intenta crear un directorio recursivo con mkdir($d, true)
<pre><?php
$d = "d" . mt_rand(100, 500);
var_dump(
array(
get_current_user(),
$d,
mkdir($d,true),
chmod($d, 0777),
mkdir("$d/$d", true),
chmod("$d/$d", 0777),
fileowner($d),
getmyuid()
)
);
Tuve un problema similar con Joomla recientemente y resolví el problema agregando myuser al grupo apache y agregando apache al grupo psaserv.
owise1
Uno de nuestros sitios web en un Media Temple DV estaba teniendo este problema. Desactivar el modo seguro de PHP lo resolvió. Los directorios todavía se crearon como apache:apache, pero los archivos multimedia estaban permitidos allí.
AleatorioBlancoPapelera
Una cosa que se me ocurrió: WP le dirá que no puede copiar el archivo a /wp-content/upload
incluso cuando todos los permisos son correctos… si
upload_max_filesize
en php.ini
es demasiado pequeño (digamos 2M e intenta cargar un archivo de 3,5 MB)!
¡Espero que eso ayude a todos aquellos que tienen los permisos correctos pero aún no pueden cargar!
Tuve este problema una vez con WordPress en un servidor Plesk, nunca supe cómo solucionarlo y terminé de moverlo a otro host.
– Aarón Butacov
14 de junio de 2010 a las 18:24
Maldita sea, estoy en el mismo barco. Eso no es muy prometedor.
–Justin Johnson
15 de junio de 2010 a las 1:14