martes, 13 de abril de 2010

Joomla 1.5: Fix para instalar extensiones

Un problema frecuente cuando administramos sitios creados con Joomla, es cuando utilizamos servicios de hosting que proveen el conocido panel de gestión cPanel, o incluso cuando tenemos varios subdominios en el mismo servidor es que la directiva open_basedir es la única que Joomla lee para establecer el directorio raíz.

Cuando instalas una extensión, uno de los mensajes de error puede ser como este:

JFolder::create: Path not in open_basedir paths
Warning! - Failed to move file.

Bien, pues la solución que yo encontré es muy simple:
1) Localiza y edita el archivo: libraries/joomla/filesystem/folder.php
2) Busca la siguiente línea: $obd = ini_get('open_basedir'); (aproximadamente por la número 194)
3) Agrega una marca de comentario, para que su aspecto quede así:


// Translate path to FTP path
         $path = JPath::clean(str_replace(JPATH_ROOT, $ftpOptions['root'], $path), '/');
         $ret = $ftp->mkdir($path);
         $ftp->chmod($path, $mode);
      } else {
         // We need to get and explode the open_basedir paths
         // $obd = ini_get('open_basedir'); && Joomla 1.5: Fix para instalar extensiones.

         // If open_basedir is set we need to get the open_basedir that the path is in
         if ($obd != null)
         {
            if (JPATH_ISWIN) {
               $obdSeparator = ";";

Listo, ahora puedes probar de nuevo la instalación de alguna extensión para tu sitio Joomla.

SEGUNDO CASO.
Cuando al instalar una extensión en tu sitio Joomla, el mensaje de error es el siguiente:

JFolder::create: Path not in open_basedir paths
Could not create directory ...

La solución es similar:
1) Localiza y edita el archivo: libraries/joomla/filesystem/folder.php
2) Busca el siguiente bloque de código (aproximadamente entre las líneas 200 - 210):
// Create the array of open_basedir paths
            $obdArray = explode($obdSeparator, $obd);
            $inBaseDir = false;
            // Iterate through open_basedir paths looking for a match
            foreach ($obdArray as $test) {
               $test = JPath::clean($test);
               if (strpos($path, $test) === 0) {
                  $obdpath = $test;
                  $inBaseDir = true;
                  break;
               }
            }

3) Entre las líneas
foreach ($obdArray as $test) {
            y
$test = JPath::clean($test);

insertar este código:
$test = $_SERVER['DOCUMENT_ROOT']; // Fix: Insertar esta línea.

El bloque de código quedaría así:
// Create the array of open_basedir paths
            $obdArray = explode($obdSeparator, $obd);
            $inBaseDir = false;
            // Iterate through open_basedir paths looking for a match
            foreach ($obdArray as $test) {
               $test = $_SERVER['DOCUMENT_ROOT']; // Fix: Insertar esta línea.
               $test = JPath::clean($test);
               if (strpos($path, $test) === 0) {
                  $obdpath = $test;
                  $inBaseDir = true;
                  break;
               }
            }
Listo, ahora puedes probar instalar extensiones para tu sitio Joomla.

4 comentarios:

  1. Nada, no me funciona... creía que iba a ser la solución pero no me va. Podría haber otra solucion?

    ResponderEliminar
  2. muchas gracias, el primer ejemplo de maravillas!!

    ResponderEliminar
  3. como puedo instalar el plug in que me va indicando la ruta en un sitio? saludos

    ResponderEliminar

Datos personales

Mi foto
Podrás encontrar códigos recursos y artículos sobre PHP, JavaScript, jQuery, MooTools, Ajax, CSS, HTML, UML, RUP, AUP, XP (eXtreme Programming), Six-Sigma, CMMI, FrameWorks, Zend Framework, Magento, CodeIgniter, CakePHP, Joomla 1.5, Doctrine, Active Record, ORM, POO, MVC, MySql, PostgreSql. Este espacio está destinado a ayudar y compartir un poco de lo mucho que he recibido de la comunidad en la Red.