Ver Mensaje Individual
  #5 (permalink)  
Antiguo 22/03/2010, 17:20
cheru
 
Fecha de Ingreso: septiembre-2005
Mensajes: 34
Antigüedad: 18 años, 7 meses
Puntos: 1
Respuesta: Problema en el manejo de includes dentro de otros includes.

En cualquier proyecto vas a tener dos tipos básicos de rutas que vas a manejar: las URI y los path de directorio del lado del servidor.
La solución más común es la siguiente:

Código PHP:
Ver original
  1. <?php
  2. // Definimos las costantes
  3. define ('LIBPATH', $_SERVER["DOCUMENT_ROOT"] .'/');
  4. define ('URL', 'http:www.dominio.com/');
  5. define ('JSLIBS', URL.'js/');
  6.  
  7. // Para hacer un include
  8. require_once (LIBPATH .'fichero.php');
  9.  
  10. // Luego para hacer una llamada en HTML
  11. echo '<script type='text/javascript' src="'.JSPATH.'fichero.js'.'"></script>';
  12.  
  13. ?>

Tenés que tener en cuenta que los includes con rutas relativas, PHP los toma relativos al script que se está ejecutando. Hay que tener mucho cuidado con eso porque puede dar lugar a confusiones y errores.

Supongamos la ordenacion del siguiente directorio del dominio prueba.com:

main.php
libs/
--> config.php
--> libDB.php
--> test.php

test.php
Código PHP:
Ver original
  1. include('libDB.php');
  2. // Esto funciona perfecto si llamamos a http://www.prueba.com/libs/test.php

main.php
Código PHP:
Ver original
  1. include('libs/test.php');
  2. // Si llamamos a http://www.prueba.com/main.php no funciona porque PHP
  3. // no encontraría el fichero libDB.php dentro del directorio raiz. Recordá que
  4. // el script en ejecucuón es main.php que se encuentra en /

Esto se solucionaría así:
test.php
Código PHP:
Ver original
  1. include('/libs/libDB.php');
  2. // Notese que agregamos la / inicial para indicar que partimos del directorio raiz

Lo más utilizado para que esto sea portable es, o bien un fichero de configuración como lo ha indicado Triby o bien la utilización de namespaces con __autoload. Justamente hoy he terminado de escribir un artículo (http://pizarradev.blogspot.com/2010/03/namespaces-en-php-53.html) sobre el tema en mi blog, por el cual podés darte una vuelta.
Si vamos al primer ejemplo que te dí, entonces el script completo quedaría así:

config.php
Código PHP:
Ver original
  1. define ('LIBPATH', $_SERVER["DOCUMENT_ROOT"] .'/');

test.php
Código PHP:
Ver original
  1. include(LIBPATH .'libDB.php');

main.php
Código PHP:
Ver original
  1. include(LIBPATH .'config.php');
  2. include(LIBPATH .'test.php');

Siempre intenta utilizar rutas absolutas para evitar problemas.

Espero que te haya servido.
Saludos

Última edición por cheru; 22/03/2010 a las 17:30