Foros del Web » Programando para Internet » PHP »

Como funciona las rutas con require_once???

Estas en el tema de Como funciona las rutas con require_once??? en el foro de PHP en Foros del Web. Buenas!!! Estoy teniendo problemas con los require_once según desde donde llame a las clases. Por ejemplo: Este el sistema de archivos que tengo: Código: miapp ...
  #1 (permalink)  
Antiguo 18/12/2010, 11:37
Avatar de huspy  
Fecha de Ingreso: diciembre-2008
Ubicación: Málaga, España
Mensajes: 120
Antigüedad: 15 años, 10 meses
Puntos: 2
Pregunta Como funciona las rutas con require_once???

Buenas!!!

Estoy teniendo problemas con los require_once según desde donde llame a las clases. Por ejemplo:

Este el sistema de archivos que tengo:

Código:
miapp
	-dao
		UsuarioDAO.php
		MySQLDB.php
	-dto
		Usuario.php
	-includes
		Login.php
		config.php
	-public
		index.php
		-admin
			login.php

desde el archivo miapp/public/index.php hago lo siguiente y funciona:

Código PHP:
<?php require_once '../dao/UsuarioDAO.php'?>
<?php 
require_once '../dto/Usuario.php'?>

$usuarios = UsuarioDAO::obtenerUsuarios();
pero si hago los require_once desde miapp/public/admin/login.php no me funciona:

Código PHP:
<?php require_once '../../dao/UsuarioDAO.php'?>
<?php 
require_once '../../dto/Usuario.php'?>

$usuario = UsuarioDAO::obtenerUsuario($user, $pass);
Este es el error:

Warning: require_once(../includes/config.php) [function.require-once]: failed to open stream: No such file or directory in C:\xampp\htdocs\miapp\dao\MySQLDB.php on line 3

Fatal error: require_once() [function.require]: Failed opening required '../includes/config.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\miapp\dao\MySQLDB.php on line 3

Y este el código de cada clase (sólo los require_once):

miapp/dao/UsuarioDAO.php

Código PHP:
require_once 'MySQLDB.php';
require_once 
'../dto/Usuario.php'
miapp/dao/MySQLDB.php

Código PHP:
require_once '../includes/config.php'//Configuración de la Base de datos 
Parece ser que depende de donde se llamen a las clases funciona de manera distinta no?. Sabéis una forma buena de resolver esto? Y si me podéis explicar el motivo sería perfecto!!

Tengo que decir que antes de escribir esto he estado buscando en el foro para encontrar una solución y en concreto he visto estos temas que comenta GatorV y pateketrueke entre otros:

http://www.forosdelweb.com/f18/probl...e_once-654283/
http://www.forosdelweb.com/f18/probl...ctorio-774798/
http://www.forosdelweb.com/f18/error...e_once-655571/

Pero no me termina de quedar muy claro. Ya que también he visto otra solución que es poner en un archivo de configuración estas constantes:

Código PHP:
define('ROOT''C:\xampp\htdocs');
define('APP_NAME''miapp');
define('APP'ROOT DIRECTORY_SEPARATOR APP_NAME ); 
Aunque esta opción me gusta, que tendría que importar este archivo en cada uno de los demás archivos no? Y utilizarlas así:

Código PHP:
require_once '../../includes/config.php';
require_once 
APP DIRECTORY_SEPARATOR 'Usuario.php'
Pero tendría el mismo problema con el archivo config.php no? Estoy hecho un lio!!

Espero que me puedan ayudar y aclarar mis dudas!!!

Muchas Gracias de antemano y Saludos!
__________________
"Lo escuché y lo olvidé, lo vi y lo entendí, lo hice y lo aprendí." (Confucio)

Última edición por huspy; 18/12/2010 a las 11:40 Razón: Faltaba texto
  #2 (permalink)  
Antiguo 19/12/2010, 12:28
Avatar de huspy  
Fecha de Ingreso: diciembre-2008
Ubicación: Málaga, España
Mensajes: 120
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Como funciona las rutas con require_once???

Buenas de nuevo...

A ver si me podeis ayudar en esto que sigo intentándolo y no me aclaro...

Saludos!!
__________________
"Lo escuché y lo olvidé, lo vi y lo entendí, lo hice y lo aprendí." (Confucio)
  #3 (permalink)  
Antiguo 19/12/2010, 12:35
Avatar de david_M_G  
Fecha de Ingreso: febrero-2005
Mensajes: 938
Antigüedad: 19 años, 9 meses
Puntos: 20
Respuesta: Como funciona las rutas con require_once???

EDITADO:

El problema, supongo, es que cuando tu haces un include, y este a su vez un include de otro archivo, esta última ruta es en referencia al primero y no al que has importado, entiendes? Tienes que imaginarlo como un copy paste (literal) del codigo en el archivo que se está ejecutando. Por eso las rutas no coinciden.

Es la explicación que yo encuentro. Ojalá sirva. Suerte.

Última edición por david_M_G; 19/12/2010 a las 12:43
  #4 (permalink)  
Antiguo 19/12/2010, 13:05
Avatar de huspy  
Fecha de Ingreso: diciembre-2008
Ubicación: Málaga, España
Mensajes: 120
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Como funciona las rutas con require_once???

Buenas david_M_G!

Gracias por la respuesta. Creo que si lo entiendo y por eso en otros temas he visto que se debe utilizar
dirname(__FILE__) no?

Por ejemplo, a ver si me he enterado...

Siendo miapp la carpeta de mi aplicación y por lo tanto desde donde cuelgan todos los archivos de la web:

Según la clase donde pongo los require_once debo poner tantos dirname() como niveles tenga que "subir" para llegar a la carpeta miapp no?

Ejemplo:

Desde la clase MySQLDB.php los require_once debo hacerlos así:

Código PHP:
require_once dirname(dirname(__FILE__)) . /dto/Usuario.php
Y desde la clase o archivo login.php los debo poner así:

Código PHP:
require_once dirname(dirname(dirname(__FILE__))) . /dto/Usuario.php
Más o menos voy bien encaminado??

Gracias y Saludos!
__________________
"Lo escuché y lo olvidé, lo vi y lo entendí, lo hice y lo aprendí." (Confucio)

Última edición por huspy; 19/12/2010 a las 13:15 Razón: Me falta un dirname en cada trozo de código

Etiquetas: rutas
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 21:16.