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