59-1-$_SERVER['REQUEST_URI

$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);

$arrayRutasFiltrado = array_filter($arrayRutas);

$countRutas = count($arrayRutasFiltrado);

El código PHP que muestras sirve para visualizar y analizar la URI (Uniform Resource Identifier) de la solicitud actual que está recibiendo el servidor.

Explicación del código:

php
<?php
echo '<pre>'; 
print_r($_SERVER['REQUEST_URI']); 
echo '</pre>';

return;

¿Qué hace $_SERVER['REQUEST_URI']?

$_SERVER['REQUEST_URI'] es una variable superglobal de PHP que contiene:

  • La ruta completa de la solicitud actual

  • Incluye el path y cualquier query string (parámetros después del ?)

  • NO incluye el dominio ni el protocolo

Ejemplos:

Si la URL es: https://miweb.com/productos/categoria?orden=precio

  • $_SERVER['REQUEST_URI'] devolvería: /productos/categoria?orden=precio

Si la URL es: https://miweb.com/

  • $_SERVER['REQUEST_URI'] devolvería: /


El código PHP que muestras sirve para visualizar y analizar la URI (Uniform Resource Identifier) de la solicitud actual que está recibiendo el servidor.

$_SERVER['REQUEST_URI'] es como la dirección completa que escribiste en el navegador después del nombre del dominio.

Ejemplo rápido:

Si visitas: https://midominio.com/productos/zapatos?color=rojo

$_SERVER['REQUEST_URI'] contendría: /productos/zapatos?color=rojo

Para qué sirve:

  • Saber en qué página está el usuario dentro de tu sitio

  • Crear menús que se marquen según la página actual

  • Redirigir a los usuarios a otras páginas

  • Hacer rutas en tu aplicación (como frameworks)

Ejemplo práctico:

php
// Si el usuario está en la página de contacto
if ($_SERVER['REQUEST_URI'] == '/contacto') {
    echo "Estás en la página de contacto";
}

Es muy útil para hacer que tu sitio web "sepa" dónde está el usuario y actuar en consecuencia.

Análisis del código:

php
<?php
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']); // ⚠️ Hay un error aquí
}

$json = array(
    "detalle"=>"no encontrado"
);

echo json_encode($json, true);

Lo que hace el código:

  1. explode("/", $_SERVER['REQUEST_URI']):

    • Toma la URL solicitada y la divide en partes usando las diagonales / como separadores

    • Convierte la URL en un array donde cada parte entre diagonales es un elemento

  2. Ejemplo práctico:

    • Si la URL es: https://miweb.com/api/usuarios/123

    • $_SERVER['REQUEST_URI'] sería: /api/usuarios/123

    • El explode("/", ...) produciría: ["", "api", "usuarios", "123"]

$arrayRutas = explode("/", $_SERVER['REQUEST_URI']); // ✅ Correcto

Corrección completa:

php
<?php
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);

// Ejemplo de cómo se usaría para routing:
if(isset($arrayRutas[1]) && $arrayRutas[1] == "api") {
    // Lógica para API
} else {
    $json = array("detalle" => "no encontrado");
    echo json_encode($json, true);
}

¿Qué hace array_filter()?

array_filter() es una función de PHP que filtra elementos de un array eliminando aquellos que son considerados "falsos" o vacíos.

En tu código:

php
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);

Ejemplo práctico:

Si la URL es: https://tudominio.com/api/usuarios/123

  • $_SERVER['REQUEST_URI'] sería: /api/usuarios/123

  • explode("/", ...) crea: ["", "api", "usuarios", "123"]

  • array_filter() elimina el primer elemento vacío ""

  • Resultado final: ["api", "usuarios", "123"]

¿Por qué se usa?

  1. Limpia elementos vacíos: Elimina strings vacíos que se crean cuando la URL empieza o termina con /

  2. Cuenta real de segmentoscount($arrayRutasFiltrado) te da el número real de partes de la ruta

  3. Mejor procesamiento: Trabajas solo con los segmentos válidos de la URL


$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);

$arrayRutasFiltrado = array_filter($arrayRutas);

$countRutas = count($arrayRutasFiltrado);


 ¡Excelente análisis! Efectivamente, el explode("/") es como un "exploit" para dividir la URL en partes manejables

Vamos a analizar el código paso a paso:

Tu interpretación es correcta en esencia:

✅ Sí, el código verifica si el array está vacío para determinar si no se hizo ninguna petición específica a la API.

  1. count($arrayRutas) - Cuenta cuántos elementos tiene el array

Código analizado:

php
<?php
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);

if(count($arrayRutas) == 0){
    /*---
    Cuando no se hace ninguna petición a la API
    */
    $json = array(
        "detalle"=>"no encontrado"
    );
    echo json_encode($json, true);
}

if(count($arrayRutas) == 0)

Esta condición verifica si el array $arrayRutas está vacío (tiene 0 elementos).

¿Cómo funciona?

  1. $_SERVER['REQUEST_URI'] - Obtiene la URL solicitada (ej: /api/usuarios/1)

  2. explode("/", ...) - Divide la URL usando / como separador

    • Ejemplo: /api/usuarios/1 → ["", "api", "usuarios", "1"]

  3. count($arrayRutas) - Cuenta cuántos elementos tiene el array

¿Cuándo se cumple esta condición?

Solo cuando la URL solicitada es exactamente / (la raíz), porque:

  • explode("/", "/") produce ["", ""] (2 elementos vacíos)

  • Pero si la URL está completamente vacía o no tiene /, el array podría tener 0 elementos

En resumen:

Este if detecta cuando alguien accede a:

  • La raíz del dominio (/)

  • O cuando no hay una ruta válida en la URL

Y responde con un JSON indicando que no se encontró nada:

json
{"detalle": "no encontrado"}

Es una forma de manejar solicitudes a rutas no definidas en la API

2. Cómo funciona realmente:

Cuando la URL es solo el dominio (ej: https://miapi.com/):

  • $_SERVER['REQUEST_URI'] = /

  • explode("/", "/") = ["", ""]

  • count($arrayRutas) = 2 (no 0)

3. La condición nunca se cumplirá:

php
if(count($arrayRutas) == 0) // ❌ Nunca será true


Porque cuenta los elementos vacios, para solucionar esto utilizamos :array_filter($arrayRutas)

$arrayRutasFiltrado = array_filter($arrayRutas);

fectivamente, tienes razón. El problema es que explode("/", "/") siempre devuelve al menos un array con elementos, incluso para la raíz. Aquí tienes varias soluciones:

Solución 1: Usando array_filter() (como mencionaste)

php
<?php
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);

if(count($arrayRutasFiltrado) == 0){
    $json = array(
        "detalle"=>"no encontrado"
    );
    echo json_encode($json, true);
    return;
}








rrr

Comentarios

Entradas más populares de este blog

60. Construcción de Controladores

Api-60-2

Te ayudo a crear una API muy sencilla en PHP utilizando esos datos