Solución al "JFolder::create: Infinite loop detected" en VPS con Plesk

Hace poco entré a trabajar en Envidea Multimedia, una empresa que es productora de vídeo y desarrolladora de páginas web, entre otras cosas. Mi tarea en Envidea, principalmente, es desarrollar webs utilizando como base Joomla!

Como las webs que vamos a desarrollar son para clientes que generan mucho tráfico, decidimos contratar un VPS a Hostalia con panel de control Plesk, con los beneficios y problemas que ello genera. 

Los beneficios están claros: Control total de un servidor.
Problemas: Que el servidor viene "prácticamente" sin configurar y que somos nosotros quienes tenemos que configurarlo y administrarlo.

Una vez configurado, empezamos a crear espacios web para las distintas webs que están en desarrollo, configuramos las DNS de los dominios, configuramos emails, instalamos Joomla!... ¿Peró cual fue nuestra sorpresa? Que Joomla! nos mostraba un error cuando modificábamos su configuración, entre otras cosas. El error es este:
JFolder::create: Infinite loop detected

Nos pusimos a investigar, y en la mayoría de foros hablan sobre la configuración de la ruta de las carpetas "tmp" y "logs". Parece ser que Joomla! quiere la ruta absoluta de estas dos carpetas y por lo visto, hay servidores que no dejan que Joomla! la lea automáticamente y por lo tanto hay que introducirla manualmente. Para ello hay una solución bastante fácil.

Creamos un documento php con un editor de textos (Dreamweaber, notepad++, ...) y pegamos el siguiente código:
<?php
echo getcwd();
?>

Después subimos este archivo a nuestro servidor y lo ejecutamos. Si le llamamos "test.php" sólo tenemos que poner "www.midominio.com/test.php". La información que nos da es la ruta absoluta de donde está alojada la web. Esta ruta irá en "Configuración global -> Sistema o Servidor -> Su casilla correspondiente". Mirad las imágenes:



El problema fue que esto a nosotros no nos solucionó el problema. Lo nuestro iba más lejos. 

Si miramos en la "Ayuda -> Información del sistema -> Configuración del PHP" del BackEnd de Joomla!, en el parámetro "Directorio base de apertura (Open basedir)" nos salía este valor:
/var/www/vhosts/eldominiotuyo.com/httpdocs:/tmp

Un valor un tanto extraño, sobre todo porque en el archivo php.ini de nuestro servidor dicho parámetro no estaba ni activado.
Por lo visto, Plesk se salta ciertos parámetros del php.ini y los configura a su gusto. El "open_basedir" es uno de ellos y la mala configuración de este parámetro es el que nos está causando el famoso "JFolder::create: Infinite loop detected". Para solucionarlo hay que forzar a Plesk a que lea nuestra configuración. 

Primero hay que crear la carpeta "conf" (si no existe ya) dentro de nuestro espacio web. La ruta absoluta sería esta: "/var/www/vhosts/midominio.com/conf". Si accedes vía FTP, como normalmente se accede a la raíz del sitio, la carpeta "conf" se crearía ahí mismo.

Luego hay que crear, si no existe ya, el archivo "vhost.conf" dentro de la carpeta "conf" con el siguiente código:

<Directory "/var/www/vhosts/midominio.com/httpdocs">

php_admin_value open_basedir "/var/www/vhosts/midominio.com/httpdocs:/tmp:/var/www/vhosts/midominio.com/directorio_includes"

php_admin_value display_errors On

</Directory>

El anterior Script lo que hace es indicar a Plesk donde están los directorios donde hay archivos que se pretenden incluir desde PHP. El Script es recursivo, así que no hace falta incluir todos los directorios, solo con el primero nos vale.

Cabe decir que donde pone "midominio.com" pondremos el nuestro, y donde pone "directorio_includes" pondremos el directorio (o ruta de directorios) que nos interese, aunque generalmente será "httpdocs".

Luego podemos incluir otros parámetros como el  "php_admin_value display_errors Off", "php_admin_value safe_mode Off",... Con esto podemos configurar los parámetros que nos interesen para cada dominio sin tener que modicar directamente el "php.ini". Las moficaciones en el "php.ini" afectarían a todos los dominios del servidor, de esta forma solo afecta al dominio en cuestión con lo que podemos crear configuraciones diferentes para cada dominio alojado en nuestro servidor.

Otro problema que me he encontrado es que vía FTP no podía acceder a la carpeta "conf". Eso es porque el propietario de dicha carpeta es "root" y yo me conecto al FTP con mi usuario. Eso se soluciona conectando como "root" o desde el panel del VPS cambiando el propietario de la carpeta, haciendo las modificaciones comentadas más arriba y luego, muy importante, volver a poner como propietario a "root".

Vale, una vez hecho todo eso tenemos que "avisar" a Plesk de los cambios. Para ello, nos tendremos que conectar via ssh a nuestro VPS. El Plesk nos facilita una consola, sino podéis utilizar el putty.

El comando a ejecutar es:
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=midominio.com  

Y luego hay que reiniciar el servidor apache con:
/etc/init.d/httpd restart

Y con esto, hemos solucionado el problema :-)

Nota: Esto hay que hacerlo para cada nuevo dominio que alojemos en el VPS (siempre que dichos dominios apunten a "Planes" diferentes dentro de nuestro VPS).


Documentación:

4 comentarios:

7170 dijo...

Por fin alguien arroja luz a este tema!! Nos pasaba exactamente lo mismo, cambiamos a Plesk 10 y no paraba de salirnos este error. Gracias!!

Rubix dijo...

Me alegro de que te haya valido. Publiqué la solución porque me costo tanto de solucionar que pensé que sería interesante hacer un "mini-tutorial" para gente con el mismo problema.

Saludos!

DavidC dijo...

Lo único que hay que hacer es deshabilitar el ftp desde sitio>>configuraración global>>servidor

Anónimo dijo...

Muchas gracias por el tutorial, me vino al pelo!