Obteniendo rutas en Php

Por el 18 de octubre de 2007

en: Programacion

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;
}

Dejar un comentario