Evitar navegación.
Principal

Obteniendo rutas en Php

Hace unos días recibía un email de un usuario (Alex) en el que me preguntaba mi opinión acerca de como obtener la ruta completa de un fichero en PHP.

El tema se comenta en este hilo, paso a resumir:

Problema de rutas 1

Supongamos que tenemos como ruta del "public_html" esta ruta completa: "/home/tuweb/public_html/" y lo que queremos es un archivo que está dos subdirectorios abajo... ó lo que es lo mismo en el raiz.

La respuesta podría ser $_SERVER['DOCUMENT_ROOT'] (El directorio raíz de documentos bajo el que está siendo ejecutado el script actual), pero el autor del hilo descarta esta opción para ello nos da tres alternativas:

Alternativa 1:

str_replace("subdir/subdir/miscript.php", "", __FILE__);

Alternativa 2:

dirname(dirname(__FILE__));

Alternativa 3:

realpath("../../");

__FILE__ nos devuelve el nombre del fichero utilizado en la ejecución del script.
str_replace:Sustitiye todas las apariciones de una cadena en otra
dirname: Devuelve el nombre del directorio de un ruta dada.
realpath: Devuelve el nombre de ruta absoluto simplificado.

¿Cúal de estas tres opciones os parecen mejor (limpia, rápida y óptima)?

Problema de rutas 2

Otro tema relacionado con las rutas de Php con el que me encontré hace poco tiempo es el siguiente:

Necesitaba obtener mediante una función la URL raiz a partir de una URL dada, voy a poner un ejemplo para facilitar un poco la comprensión del problema:

URL ofrecida: http://www.tufuncion.com/index.php
URL devuelta por función: http://www.tufuncion.com/

URL ofrecida: http://www.tufuncion.com/themes/tufuncion/logo.png
URL devuelta por función: http://www.tufuncion.com/

Esta es la función que finalmente utilicé:

function obtener_url_raiz($url) {
$parte1 = explode("/", $url);
$count = count($parte1);
$count_array = $count - 1;
if ($count >= 4) {
if ($parte1[$count_array] != '') {
$path = str_replace($parte1[$count_array], '', $url); }
else { $path = $url; }
} else {
if(substr($url,-1) != '/') $url .= '/'; $path = $url; }
return $path;
}

Enlaces Relacionados


;;;;'

;;;;'

Problema de rutas

Problema de rutas 1:
Alternativa 2

Problema de rutas 2:
¿No seria mejor usar parse_url?

Me alegra que volvais a

Me alegra que volvais a tocar temas de PHP, hacia tiempo que no leia nada por aqui y se echaba de menos. Con respecto a este tema me ha convencido la solucion que dan en el foro, más en concreto la ultima respuesta del hilo. Aunque la verdad no se con que objetivo se puede llegar a plantear esta duda teniendo la constante DOCUMENT_ROOT.

El problema de la constante

El problema de la constante DOCUMENT_ROOT es que muchos hosting la tienen definida como /, y no con la ruta de cada cuenta.

Saludos.

Enviar un comentario nuevo

El contenido de este campo se mantiene como privado y no se muestra públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato