2010-02-16 14 views
23

me gustaría obtener el último segmento de trayectoria en una dirección URL:¿Cómo obtener la última ruta en una URL?

  • http://blabla/bla/wce/news.php o
  • http://blabla/blablabla/dut2a/news.php

Por ejemplo, en estas dos direcciones URL, que desea obtener el segmento de trayectoria: 'wce ', y' dut2a '.

Intenté usar $_SERVER['REQUEST_URI'], pero obtengo la ruta completa de la URL.

Respuesta

48

Probar:

$url = 'http://blabla/blablabla/dut2a/news.php'; 
$tokens = explode('/', $url); 
echo $tokens[sizeof($tokens)-2]; 

Suponiendo $tokens tiene al menos 2 elementos.

+0

bahamut100, si esta es la respuesta correcta, entonces debe aceptarla haciendo clic en la marca de verificación blanca al lado. –

+0

@ bahamut100, de nada. Aunque iría por (y acepto) la respuesta de Alex. –

+0

@Bart K. ¡Está bien, el suyo también hará el trabajo! +1 – alex

0
$arr = explode("/", $uri); 
25

Prueba esto:

function getLastPathSegment($url) { 
    $path = parse_url($url, PHP_URL_PATH); // to get the path from a whole URL 
    $pathTrimmed = trim($path, '/'); // normalise with no leading or trailing slash 
    $pathTokens = explode('/', $pathTrimmed); // get segments delimited by a slash 

    if (substr($path, -1) !== '/') { 
     array_pop($pathTokens); 
    } 
    return end($pathTokens); // get the last segment 
} 

    echo getLastPathSegment($_SERVER['REQUEST_URI']); 

también he probado con un par de direcciones URL de los comentarios. Voy a tener que asumir que todas las rutas terminan con una barra inclinada, porque no puedo identificar si/bob es un directorio o un archivo. Esto supondrá que es un archivo a menos que también tenga una barra inclinada.

echo getLastPathSegment('http://server.com/bla/wce/news.php'); // wce 

echo getLastPathSegment('http://server.com/bla/wce/'); // wce 

echo getLastPathSegment('http://server.com/bla/wce'); // bla 
+1

+1 por usar' parse_url' para obtener solo la ruta URL. Pero debe hacer eso con '$ _SERVER ['REQUEST_URI']' también. – Gumbo

+0

Pensé que '$ _SERVER ['REQUEST_URI']' siempre regresaba con 'something/like/this'? – alex

+0

@alex: No, en PHP también contiene la consulta. Por lo tanto, la ruta URL y la consulta URL (como en la línea de solicitud HTTP). – Gumbo

9

Prueba esto:

$parts = explode('/', 'your_url_here'); 
$last = end($parts); 
+1

Puede fallar si la URL tiene una barra al final – insign

21

es fácil

<?php 
echo basename(dirname($url)); 
?> 
+1

podría haber usado algún tipo de filtrado en la url anterior. Fallará en algo como esto 'http: //www.example.com/dir1/dir2/foo? Redirect = http: // anothersite.com/default.aspx' – andyk

+0

Lo resolví simplemente usando basename(), en tu camino , Recibí el segundo nivel en "retro" – insign

+0

'nombre base ($ _ SERVER ['PHP_SELF']);' lo hice por mí – Niels

1

Otra solución:

$last_slash = strrpos('/', $url); 
$last = substr($url, $last_slash); 

1: conseguir la última barra posición 2: obtener la subcadena entre las t tala y el final de cadena

vistazo aquí: TEST

1

Si desea procesar una URL absoluta, entonces se puede utilizar parse_url() (no funciona con direcciones URL relativas).

$url = 'http://aplicaciones.org/wp-content/uploads/2011/09/skypevideo-500x361.jpg?arg=value#anchor'; 
print_r(parse_url($url)); 
$url_path = parse_url($url, PHP_URL_PATH); 
$parts = explode('/', $url_path); 
$last = end($parts); 
echo $last; 

ejemplo de código completo aquí: http://codepad.org/klqk5o29

0

escribí a mí mismo un poco de función para obtener la última dir/carpeta de un URL. Solo funciona con urls reales/existentes, no teóricos. En mi caso, ese fue siempre el caso, entonces ...

function uf_getLastDir($sUrl) 
{ 
    $sPath = parse_url($sUrl, PHP_URL_PATH); // parse URL and return only path component 
    $aPath = explode('/', trim($sPath, '/')); // remove surrounding "/" and return parts into array 
    end($aPath);        // last element of array 
    if (is_dir($sPath))      // if path points to dir 
     return current($aPath);    // return last element of array 
    if (is_file($sPath))      // if path points to file 
     return prev($aPath);     // return second to last element of array 
    return false;        // or return false 
} 

¡Funciona para mí! ¡Disfrutar! Y felicitaciones a las respuestas anteriores!

Cuestiones relacionadas