Comunidad de diseño web y desarrollo en internet online

Llamando a clases

Citar            
MensajeEscrito el 27 Ene 2012 06:39 pm
Muy buenas gente!
Tengo un problemilla y no lo puedo resolver porque no lo entiendo.

Resulta que tengo una web en la que la estructura es la siguiente (la parte que nos interesa, claro):

/Carpeta Administracion/
| |---> index.php
| |---> ... (resto de archivos que no vienen al caso)
|
|
/Carpeta Clases/
| |---> clase1.php
| |---> clase2.php
| |---> config.php
|
|
/Carpeta Contenidos/
| |---> archivo_de_contenido1.php
| |---> archivo_de_contenido2.php
| |---> ... (resto de archivos)
|
|
index.php

Sencillo, verdad?
El tema es que no tengo ningún problema... en esta web (a la que llamaré web1).
Pero lo he copiado en otro servidor, para crear otra web (a la que llamaré web2), y tengo un problema que me parece raro.

Para el funcionamiento de la web, y concretamente para el proceso de interactución con la base de datos, uso una clase.
Ésta clase hace referencia a un archivo de configuración con las variables que necesito, de este modo sólo tengo que cambiar estos valores para cada web.

En el archivo de la clase, para cargar el archivo de configuración con los datos que necesito lo hago así:

Código PHP :

require 'config.php';

La llamada de la clase desde el index.php de la carpeta Administracion las hago así:

Código PHP :

require '../clases/clase1.php'; 

Y las llamadas de la clase desde los archivos de la carpeta de contenidos las hago así:

Código PHP :

require 'clases/clase1.php'; 

(Los archivos de la Carpeta Contenidos son archivos que cargan secciones de la web (cabecera, menu, etc.))

El problema es que en la web1 esto me funciona. Pero en la web2 no lo hace!
Resulta que, por lo que he comprobado, no localiza el archivo de configuración (config.php).
Si en cambio, modifico la llamada desde la clase, y se la pongo como en el index de administración, es desde administración desde donde SI funciona, pero no desde la parte publica.
Por el contrario, si lo modifico haciendo la llamada como lo hacen los contenidos de la parte publica, funcionará en la parte publica, pero no en la privada.

Comprendo que esto suceda, ya que los contenidos que carga el index de la carpeta administración tienen la url: http://www.misitio.com/administracion, por el contrario los de la parte publica tienen la url: www.misitio.com. Lo comprendo, aunque hasta cierto punto, porque el archivo, en su forma original está llamando a otro que esta en su misma ubicación. Así que no entiendo este "cambio de perspectiva de carpetas" de una web a la otra, ya que una web entiende que los dos archivos estan en la misma carpeta y para la otra es como si no se estuviera haciendo la llamada a config.php desde la clase, sino desde los archivos index.php.

Alguien me puede mostrar la luz?

Muchas gracias!

Fran.

P.D: Espero no haberme enrollado demasiado y haberme hecho explicar ^_^

Lo que no entiendo

Por SeiyaJapon

54 de clabLevel



 

España

firefox
Citar            
MensajeEscrito el 28 Ene 2012 04:10 pm
como ya econtraste parte del error , haz la comprobacion desde ahi
si sabes 'config.php'; es el error
entonces ponle un DIE o EXIT

Código PHP :

echo 'Verificando la existencia de config.php'."\n<br/>";
echo dirname(__FILE__) . '/config.php'; 
if(file_exists(dirname(__FILE__) . '/config.php'))
{
    require 'config.php';
}
else
{
   die("El archivo no existe en la ruta" . dirname(__FILE__) . '/config.php');
}

recuerda que PHP en sistemas UNIX es sencible a Mayusculas y minusculas en sus sitema de archivos , en windows le da lo mismo config.php que Config.php, pero en UNIX no lo es

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Ene 2012 06:55 pm
Primero de todo, muchas gracias por responder.
Pero creo que no me he explicado bien. O no he entendido tu proposito (También podría ser :P)

He probado lo que me dices, y el archivo lo localiza en el servidor, desde los dos sitios.
Pero eso yo ya lo se. Yo se que el archivo existe.
El problema no es ese. Lo que yo no entiendo es porque desde una web me funciona sin ningún problema en la administración y en la zona publica, a pesar de tener un ruta distinta. Pero cuando lo pongo en otra, con la misma estructuram me da un fallo, porque tengo que hacer la llamada del archivo config en base a la url en la que estoy.
Es decir:
En la web primigenia, el archivo de la clase llamaba al archivo de configuración sólo con

Código PHP :

require 'config.php'; 

porque está en su misma carpeta. Pero desde la nueva web, que tiene la misma estructura, no me funciona.
¿Por qué? Porque resulta que necesita que la llamada que se hace desde la clase para cargar el archivo config.php, tiene que hacerla en función de la url que se ecuentra.
Si esta en www.misitio.com, la llamada tiene que hacerla (dentro de la clase) así:

Código PHP :

require 'clases/config.php'; 

Pero si esta en el administrador así:

Código PHP :

require '../clases/config.php'; 

Lo que no entiendo es porque de una web a la otra existe esta diferencia. Eso es lo que quiero comprender para arreglarlo de un modo óptimo.
Para el caso en que no se pueda resolver porque sea algo que dependa del servidor o de "veteutasaberquecosa", conozco métodos para arreglarlo, pero como me parece poco ortodoxo quería saber vuestra opinión.

Espero haberme explicado mejor ^_^

Por SeiyaJapon

54 de clabLevel



 

España

firefox
Citar            
MensajeEscrito el 29 Ene 2012 03:07 am
No entiendo muy bien como va la cosa pero prueba en el archivo principal (en el que llames a todas las clases o almenos en la primera clase llamada) pon defined('BASEPATH', dirname(dirname(__FILE__))); y en cada require pon BASEPATH antes de la dirección (o usa set include path para no tener que usar la constante todo el rato)

Por Night~

43 de clabLevel



Genero:Masculino  

Geek, Gamer, Otaku

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.