Que metodo es mejor para definir la ruta base?

Iniciado por Alex_bro, 16 Mayo 2007, 15:21 PM

0 Miembros y 1 Visitante están viendo este tema.

Alex_bro

Buenas,
Mi problema es que mi organizacion de los ficheros es algo liosa, debido a que esta todo tan ordenado, que para acceder a un archivo 3 directorios mas arriba hacia ../../../, pero claro, cuando ademas metes includes y tal... como no uses la ruta completa al final salen 3000 errores.
Mi primera pregunta es: Cual de estos 2 metodos es mejor para obtener la ruta base en todos los archivos?
- Metodo 1:
  Incluir en todos los ficheros el siguiente codigo:
  <?
$ruta_add = "/alex/algo.php";
$ruta_abs = str_replace($ruta_add, "", __FILE__);
echo $ruta_abs;
?>

  Asi, suponiendo de que __FILE__ diera /opt/...../alex/algo.php, al reemplazar lo ultimo me daria la ruta base de mi carpeta inicial.
  Lo malo de este metodo es evidente: repetitivo codigo en 2000 ficheros que abulta espacio.
  tambien me lo plantee con substr... esta bien asi o hay una forma mejor de quitarle las 2 palabras que sobran de esa ruta?
- Metodo 2:
  Incluir en el .htaccess:
  <FilesMatch "\.(php)$">
php_value short_open_tag "Off"
php_value auto_append_file "/opt/...../alex/config.php"
</FilesMatch>

y que en config.php haya una variable con el valor de la ruta absoluta.
Y en este caso lo malo seria la obligacion a usar .htaccess, que muchos hosts no lo permiten, y que se incluya hasta en los ficheros no necesarios y peligrosos en algunos casos...

Muchas gracias por leer al menos :). Agradezco tanto que se me aconseje cual de los 2 usar, como optimizar el primer metodo, que seguro hay alguna forma mas sencilla... como dar alguna otra opcion para obtener la ruta base... (DOCUMENT_ROOT no funciona ni similares por la config del host).
Otra preguntilla: dado a que veo que mucha gente no tiene ese problema de las rutas... como hacen ustedes para organizar la web? escalar como maximo a 1 dir inferior?

Saludos y muchisimas gracias.
PD: Perdonen ortografia por el teclado ingles, y tambien gracias al usuario Rentero por la aportacion que dio en mi ultimo tema sobre esto.

Azielito

No enteiendo muy bien, pero creo que podrias hcer un archivo que te incluya los archivos y luego solo llamas ese
<?php
include("incudes/Database_conec.php");
include(
"includes/DataBase_insert.php");
include(
"includes/DataBase_update.php");

include(
"includes/Files_read.php");
include(
"includes/Files_edit.php");

include(
"includes/Images_new.php");
include(
"includes/Images_edit.php);
?>


Algo asi y, luego solo mandas a llamar a ese archivo, creo que asi funcionaria '_'

eso, o no entendi nada tu duda :xD

Alex_bro

Claro, si pongo todos los archivos en un solo dir es facil, lo malo es cuando crecen los archivos y directorios y derrepente te encuentras que en /hola/foro/noseke/algo.php tienes un include asi: ../../../config.php para poder acceder al config.php que esta en la raiz, y luego a ese archivo (algo.php) lo llamas desde otro lado e imaginate... no es lo mismo ../../../ en un sitio que en otro. La solucion a eso de los includes es poner la ruta completa, pero ponerla completa a los 2000 archivos y luego ir cambiandola cuando vaya pasando de server a server...  luego esta DOCUMENT_ROOT que nos facilita la ruta absoluta, pero los hosts gratuitos tienen la costumbre de ponerlo como / y no soluciona nada. Y asi estoy yo...  ;D
Asi que o acabo usando el primer metodo u otro que alguien proponga, o pongo todos los archivos en una sola carpeta, algo que no me agradaria nada... un caos, no se como lo conseguis ustedes.

Saludos
PD: Ahora que veo la respuesta, siento que sea tan liosa y larga... si no se entiende diganmelo y la simplifico. Gracias.

LuffyFF

Puedes complicarte la vida usando ../../../ dependiendo donde estés o ../..

Pero bueno, no es lo que quieres.

El .htaccess no es seguro, como mencionas, en algunos hosts no funcionará.

Lo que yo hago es, en el config.php, definir una variable o constante, como veas. Y que el valor de esa variable o constante sea el directorio real.
Aunque si, hay que hacerlo antes, ya que después te puede pasar lo que te pasó a ti, y modificar esos files uno por uno cansa.

Citar$path "/home/Usuario/public_html";

Y al programar, pones por ej.
Citarinclude("".$path."/config.php");

Y así lo podrías incluir estes donde estés. /hola/, /hola/algo, /hola/algo/noseke, etc.

Si son muchos files, lo que puedes hacer es modificar uno por uno usando el reemplazador, son solo unos clicks.

Y cuando cambies de server, solo cambias la variable path y te ahorras trabajo si cambias de hosting seguido.

Es lo mejor si cambias de hosting y usas hosting gratuitos, donde el .htaccess esté restringido.

Ó seguir usando ../.., etc, que a veces eso puede confundir.

Salu2.

Alex_bro

Gracias por responder, agradezco el tiempo que hayas echado en formular la respuesta.
Eso que dices de poner en una variable de config.php la ruta significaria estar en las mismas, ya que para acceder al config necesito saber su ruta completa... sino quiero usar cosas como ../../../config.php y luego incluir el archivo que contiene eso en algun otro sitio y se lia...
Lo del remplazador ya lo habia pensado... pero estar utilizando un programa cada vez que haga el minimo cambio... tiene que haber alguna forma mas sencilla, existen 1000 sistemas en php que no te dicen que uses un reemplazador, como mucho te piden que escribas su ruta en un config.php y luego el script se busca la vida de alguna forma para acceder a ese config desde cualquier script de su sistema, que es lo que quiero hacer.

Por si no se me entendio, el problema es el siguiente:
imaginense que la ruta sea /home/alex/, y existe un fichero llamado hi.php en la carpeta hola que contiene include(../config.php); , este include daria /home/alex/config.php, hasta ahora bien, pues si yo tengo otro fichero llamado admin.php en la carpeta hola/admin , el include de hi.php se incluiria en admin.php resultando /home/alex/hola/config.php y daria error.
Esto ocurre por no poner la ruta y hacerlo con ../
Bien, pues yo queria una funcion/metodo en php de coger la ruta completa sin utilizar la predeterminada DOCUMENT_ROOT, ya que muchos hosts no la tienen definida, asi que queria saber si existe un metodo mejor que el que expuse como "metodo 1" en mi primer post de este tema, o sino hay mas formas, hacerlo mas optimo en lugar de usar str_remplace usar algun otro por algun motivo, ya que este lo hice yo y seguro que alguien que lleve mejor el php podra encontrar mejor manera.

Saludos, y perdonen la "paranoia" que expuse... no queria quedarme toda la vida pensando que podria existir un mejor metodo... Gracias.