Foros del Web » Programando para Internet » PHP »

problemas de ruta en servidores distintos

Estas en el tema de problemas de ruta en servidores distintos en el foro de PHP en Foros del Web. Hola, estoy teniendo problemas de rutas en un sitio que estoy haciendo, en mi servidor local anda bien pero en el servidor del cliente no, ...
  #1 (permalink)  
Antiguo 20/02/2010, 20:37
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
problemas de ruta en servidores distintos

Hola,
estoy teniendo problemas de rutas en un sitio que estoy haciendo, en mi servidor local anda bien pero en el servidor del cliente no, lo que se pierde son las rutas de los directorios el codigo que uso es este:
Código PHP:
Ver original
  1. $ubicacion=explode('/',$_SERVER['PHP_SELF']);
  2.            
  3.            //incluyo el archivo de configuracion
  4.            include_once($_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1].'/configuracion.php');
  5.            
  6.            //creo una instancia de la configuracion
  7.            $config= Config::singleton();
  8.            
  9.            
  10.            
  11.            //cargo todas las clases
  12.            $this->loader($_SERVER['PHP_SELF']);
  13.                    
  14.            //obtengo el controlador que se envia por $_GET
  15.            $controller = $_GET['controlador'];
  16.            
  17.            //obtengo el controlador que se envia por $_GET
  18.            if(isset($_GET['accion'])){
  19.             $action = $_GET['accion'];
  20.            }
  21.            //seteo el path
  22.            $path=$_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1].'/website/';
  23.                      
  24.            //valido si no estoy en el root y seteo el nuevo path
  25.            if($ubicacion[2]!='index.php'){
  26.                $path=$_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1]."/".$ubicacion[2]."/";                    
  27.            }           
  28.        
  29.            //seteo el controlador si esta vacio seteo el controlador por default
  30.            if( empty($controller) ){
  31.              $controller = 'indexController';
  32.            }
  33.            else{
  34.              $controller = $controller.'Controller';
  35.            }
  36.            
  37.            
  38.            //cargo el lenguaje del sistema
  39.            $idiomaActual=$config->get('lenguaje');
  40.            if(isset($_GET['idioma'])){
  41.             setcookie ("idioma", $_GET['idioma'], time () + 7*24*60*60);
  42.             $idiomaActual = $_GET['idioma'];
  43.            }
  44.            elseif(isset($_COOKIE['idioma'])){
  45.  
  46.             // Miramos que exista el archivo del idioma
  47.             if(file_exists($_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1]."lenguajes/".$_COOKIE['idioma'].".php")){
  48.                 $idiomaActual = $_COOKIE['idioma'];
  49.             }
  50.            }
  51.  
  52.            // Incluimos el archivo del idioma seleccionado
  53.            // o el archivo por defecto si no se seleccionó
  54.            // idioma o si no se encuentra el archivo
  55.            include $_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1]."/lenguajes/".$idiomaActual.".php";
  56.  
  57.            //extraigo el nombre del controlador.
  58.            $nombre=explode('Controller',$controller);
  59.            
  60.            //seteo la accion, si esta vacia seteo la acción por default
  61.            if( empty($action) ){
  62.                $action = 'index';
  63.            }
  64.            else {
  65.                $action = $action ;
  66.            }
  67.            
  68.            //seteo la ruta del controlador
  69.            $controllerLocation =  $path . 'controladores/' . $nombre[0] . '/'.$controller.'.php';
  70.            $vista=$path . 'controladores/' . $nombre[0] . '/templates/';
  71.            $config->set('vista',$vista);
  72.          
  73.            //creo una instancia de los errores
  74.            //$errores= Errores::singleton();
  75.            
  76.            //valido si existe el archivo sino ejecuta la excepcion
  77.            if( file_exists( $controllerLocation ) ) {
  78.                  include_once( $controllerLocation );
  79.            } else {
  80.                 trigger_error("No se encuentra el controlador $controllerLocation<br/>",E_USER_NOTICE);
  81.            }
  82.  
  83.            //valido si existe la clase sino ejecuta la excepcion
  84.            if( class_exists( $controller, false ) ) {
  85.                   $cont = new $controller();
  86.            } else {
  87.                   trigger_error( "No se encuentra la clase en el controlador $controller en $controllerLocation<br/>",E_USER_NOTICE);
  88.            }
  89.            
  90.            //valido si existe el método sino ejecuta la excepcion
  91.            if( method_exists( $cont, $action ) ) {
  92.                   $cont->$action();
  93.            } else {
  94.                    trigger_error( "La Acción $action no existe $action en la clase $controller en $controllerLocation<br/>",E_USER_NOTICE);
  95.            }
  96.  
  97.            
  98.  
  99.      }
  100.      /**
  101.       * Cargador de clases
  102.       *
  103.       * @name loader
  104.       * @access public
  105.      *  @version 0.1
  106.      *  @since 0.1
  107.      *  @author Lucas M. Sastre
  108.       */
  109.      public function loader($path){
  110.          //separo los parametros de la url
  111.         $ubicacion=explode('/',$path);
  112.        
  113.         //creo el path para las clases
  114.         $path=$_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1].'/core/clases/';
  115.        
  116.         //leeo el directorio
  117.         $dir = scandir($path);         
  118.         //valido si es un array y que tenga algun contenido
  119.         if ((is_array($dir)) && (count($dir) > 0))
  120.                 foreach ($dir as $k=>$v)
  121.                     //recorro el directorio y valido que sea un archivo php                                
  122.                     if ( !(is_dir($path.$v)) && ( file_exists($path.$v) ) && ($v != ".")  && ($v != "..") && (strtolower(end(explode(".", $v))) == 'php') )
  123.                         //incluyo el archivo
  124.                         include_once($path.$v);
  125.                     elseif ( is_dir($path.$v) && ($v != ".") && ($v != "..") && ($v != 'smarty') )
  126.                         loader($path.$v."/");
  127.      }
  128.      
  129.      
  130.      
  131.      
  132. }

entonces si yo entro a localhost/elsitio o localhost/elsitio/admin todo anda correctamente, pero si subo todos los archivos al servidor del cliente no anda el sitio me tira error de que no encuentra los archivos y cuando hago un print_r de $ubicacion=explode('/',$path); veo que no tienen el mismo contenido que en mi servidor local, tiene un indice menos en vez de tener:
$ubicacion[0],$ubicacion[1],$ubiciacion[2]
tengo:
$ubicacion[0],$ubicacion[1]

por lo tanto tengo que cambiar todo el codigo para que me detecte correctamente las rutas, estoy haciendo algo mal?

salu2
  #2 (permalink)  
Antiguo 20/02/2010, 22:01
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: problemas de ruta en servidores distintos

Quizas no acabo de entender...¿Porque no solamente usas rutas relativas? Se me hace muy complicado como lo estas haciendo, porque finalmente si la carpeta donde esta tu sitio en tu servidor local, esta dentro de mas o menos subcarpetas que en el servidor del cliente, todo se te va a mover.
Por ejemplo, si tu sitio en el servidor local esta en la ruta absoluta /carpeta1/carpeta2/sitio, y la ruta absoluta en el servidor del cliente es /carpetaA/sitio, el arreglo $ubicacion va a tener 3 valores en el primer caso, y 2 en el segundo, lo que forzosamente te va a mover todo.

Si nos puedes decir la razon de intentar usar las rutas como lo haces, podriamos ayudarte mejor.

Suerte!
  #3 (permalink)  
Antiguo 21/02/2010, 08:17
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: problemas de ruta en servidores distintos

la idea de hacerlo así es precisamente evitar que tener que tocar todas las veces el archivo ese, cosa que que no importe como sea la ruta del sitio. Tengo un archivo de configuración donde guardo esto (seteo la ruta del sitio):
Código PHP:
Ver original
  1. $ubicacion=explode('/',$_SERVER['PHP_SELF']);
  2. $config->set('ruta',$ubicacion);
De ultima ahí podría hacer que verifique la ruta del sitio.
La idea de usarlo de esta manera es que yo pueda tener una estructura como esta:
Código:
admin -> aca va la administracion
      modulos
      templates
website ->aca va el frontend
     modulos
     templates
otra_aplicacion
     modulo
     template
otra_aplicacion_mas
     modulo
     template
Esto funciona muy bien, pero la unica manera que encontre para hacerlo funcionar fue con $ubicacion=explode('/',$_SERVER['PHP_SELF']); para saber a que parte estoy intentando acceder y con $path=$_SERVER['DOCUMENT_ROOT']."/".$ubicacion[1].'/website/'; para incluir los archivos ya que con rutas relativas no me funciona. Si hay una forma as facil de hacerlo escucho ideas.
Gracias
  #4 (permalink)  
Antiguo 22/02/2010, 22:57
Avatar de camsworksinc  
Fecha de Ingreso: julio-2008
Ubicación: Queretaro
Mensajes: 261
Antigüedad: 15 años, 9 meses
Puntos: 11
Respuesta: problemas de ruta en servidores distintos

Una sugerencia para obtener la carpeta donde se esta ejecutando el script a partir del path completo es usar lo siguiente:
Código PHP:
Ver original
  1. $carpeta=substr($path,strrpos($path,"\\"));
En vez del explode, el cual, como te comente, tiene el problema de que si la ruta en el servidor tiene mas niveles, la ultima carpeta ya no coincidira con aquel servidor con menos niveles.
Una forma de ver tambien que esta pasando, es imprimiendo el contenido del arreglo $ubicacion, para que puedas ver que valores estas tomando.
La manera facil de verlo es usando lo siguiente:
Código PHP:
Ver original
  1. print_r($ubicacion)

Espero te sirva!
  #5 (permalink)  
Antiguo 27/02/2010, 09:44
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 19 años, 5 meses
Puntos: 43
Respuesta: problemas de ruta en servidores distintos

Hola yo de nuevo molestando jejeje,
he realizado lo que me dices pero no me funciona nose que estoy haciendo mal, he puesto este codigo para testearlo en frontcontroller:
Código PHP:
Ver original
  1. $ubicacion1=substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],"\\"));
  2.         echo "<pre>";
  3.         print_r($_SERVER['PHP_SELF']);
  4.         echo "</pre>";
  5.         echo "<pre>";
  6.         print_r($ubicacion1);
  7.         echo "</pre>";
y en el local cuando entro al frontend me imprime:
Cita:
/ampa/index.php
/ampa/index.php
y en el backend me imprime:
Cita:
/ampa/admin/index.php
/ampa/admin/index.php
en el frontend del servidor me imprime:
Cita:
/index.php
/index.php
y en el backend :
Cita:
/admin/index.php
/admin/index.php
si yo ahora cambio el print_r($ubicacion1); por print_r(explode('/',$ubicacion1)); lo que me imprime en el local es:
front:
Cita:
/ampa/index.php
Array
(
[0] =>
[1] => ampa
[2] => index.php
)
backend:
Cita:
/ampa/admin/index.php
Array
(
[0] =>
[1] => ampa
[2] => admin
[3] => index.php
)
y en el servidor me devuelve:
front:
Cita:
/index.php
Array
(
[0] =>
[1] => index.php
)
back:
Cita:
/admin/index.php
Array
(
[0] =>
[1] => admin
[2] => index.php
)
Es decir me sigue haciendo lo mismo que antes, para poder validar a que directorio entrar en el servidor voy a tener que sacar un elemento del array (mas allá que el [0] no tenga nada), y en el local dejar un elemento. Que estoy haciendo mal?

Etiquetas: distintos, ruta, servidores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:25.