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
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:
// 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
$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:
explode("/", $_SERVER['REQUEST_URI']):Toma la URL solicitada y la divide en partes usando las diagonales
/como separadoresConvierte la URL en un array donde cada parte entre diagonales es un elemento
Ejemplo práctico:
Si la URL es:
https://miweb.com/api/usuarios/123$_SERVER['REQUEST_URI']sería:/api/usuarios/123El
explode("/", ...)produciría:["", "api", "usuarios", "123"]
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']); // ✅ CorrectoCorrección completa:
<?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);
}
<?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.
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:
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);
$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"]
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?
Limpia elementos vacíos: Elimina strings vacíos que se crean cuando la URL empieza o termina con /
Cuenta real de segmentos: count($arrayRutasFiltrado) te da el número real de partes de la ruta
Mejor procesamiento: Trabajas solo con los segmentos válidos de la URL
Limpia elementos vacíos: Elimina strings vacíos que se crean cuando la URL empieza o termina con /
Cuenta real de segmentos: count($arrayRutasFiltrado) te da el número real de partes de la ruta
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.
count($arrayRutas)- Cuenta cuántos elementos tiene el array
Código analizado:
<?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
$arrayRutasestá vacío (tiene 0 elementos).¿Cómo funciona?
$_SERVER['REQUEST_URI']- Obtiene la URL solicitada (ej:/api/usuarios/1)
explode("/", ...)- Divide la URL usando/como separador
Ejemplo:
/api/usuarios/1→["", "api", "usuarios", "1"]
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:
{"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á:
if(count($arrayRutas) == 0) // ❌ Nunca será truePorque 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
$arrayRutas = explode("/", $_SERVER['REQUEST_URI']);
$arrayRutasFiltrado = array_filter($arrayRutas);
if(count($arrayRutasFiltrado) == 0){
$json = array(
"detalle"=>"no encontrado"
);
echo json_encode($json, true);
return;
}
Comentarios
Publicar un comentario