.

domingo, 16 de julio de 2023

Crear un acortador de URLs con PHP

 Todos hemos visto los servicios de shortener urls como cutt.ly o bitly, son bastante útiles para hacer más pequeños los enlaces al compartirlos, hoy vamos a ver cómo crear un acortador de URLs similar a estos servicios mediante PHP y un nombre de dominio.

Actualmente estoy trabajando en un sistema en el que enviamos un SMS con un enlace.

Este enlace por supuesto es algo grande y el texto que acompaña el SMS se ve afectado por él.

La solución fue hacer uso de los acortadores de enlaces que existen en Internet.


Encontré algunos gratuitos y otros de paga, algunos con servicio de API y otros con apenas información en su sitio web.

Mejor me decidí por crear mi propio acortador de enlaces, solo tuve que adquirir un dominio adicional.

Veamos cómo crear un acortador de URLs con PHP.

CONSIGUE UN DOMINIO CORTO

Lo primero que necesitamos es ir a Godaddy y buscar un dominio corto.

Preferentemente utiliza una extensión de dominio inusual, esto hará que el costo del dominio sea el normal, recuerda que dominios cortos suelen ser bastante costosos.

Puede ser un dominio tipo ctrlz.cc o similar, ¿ves que el tamaño es realmente corto?

Una vez que lo hemos contratado actualiza los name servers para que apunten a tu servicio de hospedaje web.

Antes de apuntarlo debemos dar de alta el dominio adicional en el cPanel de nuestro hosting o en el área equivalente de tu proveedor.

CREA UNA BASE DE DATOS

Nos vamos a nuestro hospedaje web y crearemos una base de datos si no la tienes.

Posteriormente vamos a crear una tabla llamada redirect.

Esta tabla únicamente tendrá 3 campos: id, short_url y full_url.

Si quieres agregar más campos para estadística o control eres libre de hacerlo.

En el campo short_url vamos a guardar la URL corta y en full_url vamos a guardar la URL normal a la que vamos a redireccionar.

HAZ QUE REDIRECCIONE

Si ya has adquirido el nombre de dominio corto y lo has apuntado a tu servidor continuemos.

Vamos a la carpeta de este dominio y crearemos un archivo .htaccess.

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)$ index.php?s=$1 [L]

Como puedes ver vamos a crear un archivo index.php pero eso lo haremos en el siguiente paso.

Por ahora este código nos servirá para redireccionar el parámetro recibido así:

https://ctrlz.cc/w5kt4l

de tal forma que se reciba como si fuera recibido de esta manera:

https://ctrlz.css/index.php?s=w5kt4l

Ahora crearemos un archivo index.php:

if (isset($_GET['s'])) {
$short_url = $_GET['s'];
$short_url = "https://ctlis.cc/" . $short_url;
$sql = " SELECT full_url FROM redirect WHERE short_url = ?; ";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $short_url);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$full_url = "";
while ($fila = $result->fetch_assoc()) {
$full_url = $fila['full_url'];
}
$stmt->close();
header("Location: " . $full_url);
} else {
exit();
}
} else {
exit();
}

Nos aseguramos de recibir un parámetro y luego creamos la short_url.

La validamos de que exista en base de datos y lo único que hacemos es buscarla, obtener la full_url y redireccionar.

Si ahora registramos directamente en base de datos un registro con una URL corta y una URL completa podremos hacer la prueba.

Cuando vayamos a nuestro dominio corto ctrlz.cc/w5kt4l nos redireccionará a la URL que corresponde de la base de datos.

REGISTRA ENLACES CORTOS

¿Perfecto no? Aunque claro no registraremos los enlaces siempre directamente en base de datos.

En mi caso necesito generar dinámicamente estos enlaces cortos así que hice la siguiente funcion:

function acortarEnlace($full_url){
do {
$bytes = random_bytes(3);
$token = bin2hex($bytes);
$sql = " SELECT short_url FROM redirect WHERE short_url = ?; ";
$stmt = $this->conn->prepare($sql);
$tmp = "https://ctrlz.cc/".$token;
$stmt->bind_param("s", $tmp);
$stmt->execute();
$result = $stmt->get_result();
} while ($result->num_rows > 0);
$short_url = "https://ctrlz.cc/".$token;
$sql = " INSERT INTO redirect(short_url, full_url) VALUES(?,?); ";
$stmt = $this->conn->prepare($sql);
$stmt->bind_param("ss", $short_url, $full_url);
if ($stmt->execute()) {
return $short_url;
} else {
return false;
}
}

Esta función lo que hace es recibir una URL normal y cambiarla por una URL corto registrando antes en base de datos el cambio.

Nos aseguramos de que el parámetro o token generado no se repita y agregamos el nuevo registro en la tabla redirect.

Si todo va bien nos regresa la URL corta ya registrada en base de datos de lo contrario nos regresa false.

¡Listo! Ahora tenemos nuestro shortnet url creado por nosotros y aprendiendo toda la lógica detrás de este servicio.

Si esta información sobre cómo crear un acortador de URLs con PHP te ha sido de utilidad no olvides compartirla en tus redes sociales favoritas y dejarnos un comentario en la sección de abajo si tienes alguna duda respecto a este tema, será un placer ayudarte.

¡Hasta luego!

No hay comentarios:

Publicar un comentario

Administrar Editor de Texto JOOMLA