Foros del Web » Programando para Internet » PHP »

Include Avanzado!

Estas en el tema de Include Avanzado! en el foro de PHP en Foros del Web. Hola, Tengo el siguiente problema (espero que se entienda): Quiero poner un script de configuración "config.php" un nivel por arriba de la carpeta de publicación ...
  #1 (permalink)  
Antiguo 17/04/2006, 21:09
ASL
 
Fecha de Ingreso: marzo-2006
Mensajes: 10
Antigüedad: 18 años
Puntos: 0
Include Avanzado!

Hola,
Tengo el siguiente problema (espero que se entienda):

Quiero poner un script de configuración "config.php" un nivel por arriba de la carpeta de publicación para que no se pueda acceder a él, utilizandolo solamente en otros sripts mediante "Include".
El problema es que tengo otros dos scripts, llamemosle "a.php" y "b.php"; los dos dentro del directorio de publicación pero en distintas sub-carpetas;
Entonces se da que "a.php" incluye a "b.php" y "b.php" incluye a "config.php" (que está fuera del directorio de publicación);

Esto me termina siempre dando error de que no se encuentra el archivo "config.php" al llamar a "a.php".
¿Como lo soluciono?

Gracias.
  #2 (permalink)  
Antiguo 17/04/2006, 21:23
 
Fecha de Ingreso: marzo-2006
Ubicación: Ramos Arizpe, Coah
Mensajes: 70
Antigüedad: 18 años, 1 mes
Puntos: 0
A la hora de hacer los includes que estan fuera de una carpeta los hacer con rutas absolutas ejemplo.

Este esta fuera de la carpeta y se requiere de ese archivo.
include("../a.php");

a.php
carpeta
archivo que llama al include ../ de esta forma llamas a.php

En cambio este esta afuera de la carpeta y necesito uno que esta dentro de una carpeta

include("carpeta/p.php");

archivo que llama al include carpeta/b.php de esta forma llamas b.php

esto lo haces carpeta/
carpeta
b.php
  #3 (permalink)  
Antiguo 17/04/2006, 21:44
ASL
 
Fecha de Ingreso: marzo-2006
Mensajes: 10
Antigüedad: 18 años
Puntos: 0
Si eso ya lo se, pero en este caso precisamente eso no me alcanza,
porque por ejemplo:

a.php tiene:
Include("../b.php")

b.php tiene:
Include("../config.php")

entonces al llamar a a.php se incluye bien el archvio b.php que está en un nivel superior, pero no se incluye config.php que esta dos niveles por arriba.
Al estar incluido el codigo de b.php en a.php, la carpeta actual es la de a.php
entonces se trata de buscar config.php un nivel más arriba y no dos niveles.

Esto lo podría solucionar usando rutas absolutas, el problema es que config.php esta fuera del directorio de publicación, entonces creo que tampoco puedo de esa manera.
  #4 (permalink)  
Antiguo 17/04/2006, 23:13
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Eso lo discutía en el siguiente tema en este foro:

http://www.forosdelweb.com/showthrea...ighlight=capas

Lo cual me llevó a escribir el siguiente "post" en mi "blog", como resumen final:

"PHP5: Diseño en 3 capas y problemas con subdirectorios"
http://phpcinco.blogspot.com/2006/04...lemas-con.html

Por ejemplo:

"Si lo solucionamos con "referencias absolutas", nuestro sistema queda "hardcoded" y dificultamos el cambio de lugar físico a nuestra aplicación. Si intentamos hacer todas "referencias relativas", como dice su palabra, dependerán de donde son invocadas estas referencias para que funciones o no (por eso son "relativas")."
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #5 (permalink)  
Antiguo 18/04/2006, 00:30
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Yo tengo una duda, ¿qué tan malo puede ser incluir un q.php que se encargue de incluir a todos?


Así, sólo se usa en cualquier script include('q.php'). Punto.

¿Qué hace q.php?

Pues algo como:

require_once("anypath/a.php");
require_once("anypath/b.php");
require_once("anypath/c.php");
require_once("anypath/d.php");
require_once("anypath/e.php");


Pero que a.php no incluya a b.php, es decir, que no se incluyan entre ellos. Sólo un padre: q.php Y muchos hijos. El padre incluye a todos sus hijos, pero los hijos no se incluyen entre ellos.

¿Es malo? ¿causa algún conflicto? ¿disminuye el rendimiento notablemente?

Bueno, son dudas que siempre he tenido.
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #6 (permalink)  
Antiguo 18/04/2006, 07:11
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Bueno, lo que yo he terminado haciendo (y lo comenté en mi artículo) es un "configuración.php" que es incluido por todos los archivos del sistema, y luego usas "constantes" para hacer referencias a los lugares que quieres acceder.

En una parte te encontrarás con "el huevo y la gallina" para resolver como incluir el "configuracion.php" y no volver a tener que decidir qué es más conveniente, si "harcoded" o si "relativo".

Usas una llamada al servidor solicitando el "document root" de tu sistema.

Si hubieras leído el artículo, lo hubieras entendido
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #7 (permalink)  
Antiguo 18/04/2006, 07:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por uamistad
Yo tengo una duda, ¿qué tan malo puede ser incluir un q.php que se encargue de incluir a todos?


Así, sólo se usa en cualquier script include('q.php'). Punto.

¿Qué hace q.php?

Pues algo como:

require_once("anypath/a.php");
require_once("anypath/b.php");
require_once("anypath/c.php");
require_once("anypath/d.php");
require_once("anypath/e.php");


Pero que a.php no incluya a b.php, es decir, que no se incluyan entre ellos. Sólo un padre: q.php Y muchos hijos. El padre incluye a todos sus hijos, pero los hijos no se incluyen entre ellos.

¿Es malo? ¿causa algún conflicto? ¿disminuye el rendimiento notablemente?

Bueno, son dudas que siempre he tenido.
Lo que sucede es que enriqueplace simplemente va mas allá de lo que PHP hace actualmente o abarca y que -otros- lenguajes si lo soportan en cuanto a otros conceptos como los que menciona en su artículo de su "blog".

Pero en su base .. sin liarnos con "capas" ni "OOP" simplemente se trata de definir constantes o usar variables de servidor que nos dán la ruta absoluta hacia nuestro "document root" como $_SERVER['DOCUMENT_ROOT'] para hacer referencia a los archivos. Así de esta forma NO dependemos de donde estén ubicados nuestros archivos en ningún caso.

El tema de tener un script "padre" que llame a otros scripts anexos .. no sé que tanto bajará el rendimiento .. pero lo principal sigue siendo que se usen rutas absolutas completas como sea. Si a su vez esos "scritps" que llamamos son classes o simple código en programación "estructurada".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 18/04/2006, 07:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por enriqueplace
Bueno, lo que yo he terminado haciendo (y lo comenté en mi artículo) es un "configuración.php" que es incluido por todos los archivos del sistema, y luego usas "constantes" para hacer referencias a los lugares que quieres acceder.

En una parte te encontrarás con "el huevo y la gallina" para resolver como incluir el "configuracion.php" y no volver a tener que decidir qué es más conveniente, si "harcoded" o si "relativo".

Usas una llamada al servidor solicitando el "document root" de tu sistema.

Si hubieras leído el artículo, lo hubieras entendido
El problema de tu artículo es que "asusta" la explicación del problema "rutas absolutas/relativas" aplicado a "capas" y "OOP" .. simplemente eso. No desmerezco tu trabajo y lo aplaudo (yo como ya he dicho alguna vez soy apenas "usuario" de OOP .. Disculpa el atrevimiento de opinar de algo que no conozco en profundidad).

Por eso simplemente hice la aclaración anterior del fondo del problema.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 18/04/2006, 10:51
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Tienes razón, no lo había visto de esa manera. Tal vez tenga demasiado "ruido extra" como para que sirva de explicación sencilla a esta pregunta. El tema es como dice el título, inicia por un lado y termina por otro más simple.

Si, los comentarios siempre son bienvenidos
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #10 (permalink)  
Antiguo 18/04/2006, 11:34
ASL
 
Fecha de Ingreso: marzo-2006
Mensajes: 10
Antigüedad: 18 años
Puntos: 0
Muchisimas gracias a Enrique Place y a Cluster, la verdad que una respuesta más completa no puedo esperar
Saludos.
  #11 (permalink)  
Antiguo 18/04/2006, 15:53
Avatar de uamistad  
Fecha de Ingreso: diciembre-2004
Ubicación: Cd. de México
Mensajes: 1.395
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
El problema de tu artículo es que "asusta" la explicación del problema "rutas absolutas/relativas"

Jajaja, yo entré súper interesado en su blog, poniendo toda mi atención y realmente me asustó, =)
__________________
"Di no al Internet Explorer" -Proverbio Chino-
  #12 (permalink)  
Antiguo 18/04/2006, 21:45
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
bueno, pero tampoco es para tanto

El tema original es hablar de la como poder implementar una arquitectura en 3 capas (como se hace en otros lenguajes, como Java o .Net) y de paso cuento los problemas existentes en PHP5, que no terminan de facilitar este tipo de implementación.

Y de paso, sirve para tener una alternativa a la hora de trabajar con un archivo de configuración general y poder resolver el problema de trabajar con los subdirectorios
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
  #13 (permalink)  
Antiguo 27/04/2006, 06:20
 
Fecha de Ingreso: abril-2004
Ubicación: Rosario, Argentina
Mensajes: 124
Antigüedad: 20 años
Puntos: 11
A ninguno se le ocurrió usar set_include_path ?????????????? es justamente para resolver ese problema.

EJ:

Directorios:
config.php
carpeta_01
-- a.php
-- carpeta_02
---- b.php

En config.php hay que poner:
set_include_path( get_include_path() . ';' . dirname(__FILE__) );

Después de incluir config.php todos los includes de cualquier archivo pueden ser relativos al directorio donde esté el archivo config.php. PHP al hacer un include primero busca en la directiva set_include_path por lo que también tiene mejor rendimiento este método.

Saludos.
  #14 (permalink)  
Antiguo 27/04/2006, 07:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por gnfrs
A ninguno se le ocurrió usar set_include_path ?????????????? es justamente para resolver ese problema.

EJ:

Directorios:
config.php
carpeta_01
-- a.php
-- carpeta_02
---- b.php

En config.php hay que poner:
set_include_path( get_include_path() . ';' . dirname(__FILE__) );

Después de incluir config.php todos los includes de cualquier archivo pueden ser relativos al directorio donde esté el archivo config.php. PHP al hacer un include primero busca en la directiva set_include_path por lo que también tiene mejor rendimiento este método.

Saludos.
Si, . usar dicha función o directiva de PHP.ini equivalente (o bajo un .htaccess) es una solución para no preocuparse de indicar una ruta para el archivo a incluir. (Esto por ejemplo es típico y como funcina PEAR por ejemplo .. lo único que en "PEAR" casi que te obligan a hacerlo por el "include_path =..." del php.ini o equivalente).

Lo que no resuelve esa función o directivas de configuración es como tratar un "paquete", "bloque" o "combo" de archivos a incluir con una sóla llamada de algún "objeto" o similar que lo gestione como así parece que otros lenguajes lo manejan con sus "paquetes" y en PHP nos tendríamos que limitar a crear un librerias.php que llame a otros archivos.php con un montón de "include()" en ese "librerias.php".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 17:24.